在Spring Boot应用启动时如何执行代码? -Dukesletter


有时,您的应用程序需要在启动时加载或预处理一些信息。如果您正在使用像Spring Boot这样的复杂框架来管理对象的生命周期,那么何时才是正确的时刻?spring提供了哪些机制来执行该过程?
Spring Boot具有多种机制,Tom Hombergs在以下文章中总结了主要机制:“ 在Spring Boot应用程序启动时执行代码 ”。
 
作为个人建议:切勿使用@PostConstruct或加载或处理信息InitializingBean。
 

Spring在创建应用程序上下文时会调用这些方法,并且该过程在主线程中执行,从而锁定了其他初始化过程。如果您有多个带有的对象@PostConstruct,它们将在主线程中按顺序执行,并且您不知道执行的顺序。

我个人更喜欢使用CommandLineRunner,ApplicationRunner或者ApplicationListener,因为一旦应用程序上下文已经建立,包括HTTP容器(Tomcat或码头),它们被执行,因为上下文已准备就绪,你可以并行执行多个进程。
如果要正确管理如何用信号通知容器的就绪状态,则如何初始化服务器很重要。