【问题标题】:What is the exact purpose of the CommandLineRunner in Spring BootSpring Boot 中 CommandLineRunner 的确切用途是什么
【发布时间】:2021-10-25 21:12:12
【问题描述】:
如果有人能解释为什么使用 @SpringBootApplication 注释的类也经常实现 CommandLineRunner,我将不胜感激。根据我的阅读,在加载应用程序上下文后,Spring Boot 将自动调用实现此接口的所有 bean 的 run 方法。所以 run() 方法在 bean 注册后在 main() 方法中出现的第一条和最后一条指令之间运行。那么实现CommandLineRunner具体需要什么,我的意思是为什么不只是将代码从run()添加到main()
【问题讨论】:
标签:
java
spring
spring-boot
【解决方案1】:
CommandLineRunner 是一个具有 run() 方法的接口。它用于在 spring boot 应用程序启动后执行一些代码。主应用程序应实现此接口并覆盖其运行方法。在这个 run 方法中,我们编写代码,例如使用一些值或任何其他应该在应用启动后立即执行的逻辑来初始化我们的数据库。
【讨论】:
-
spring boot 应用程序启动的具体时间是什么时候?如果有人在 main 和 run 方法中记录指令,他会看到那些 run 是在 main 完成之前执行的——这让我觉得“在 spring boot 应用程序启动之后”这句话是不正确的。我想知道为什么不在 main 方法中初始化数据库?除了这条典型的 SpringApplication.run(, args) 行之外,它还能做什么?