在Sprint Boot 2.x中,我们可以使用以下两种方法之一初始化应用程序:
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
init();
}
private void init() {
// Init the app from in here...
}
}
或者我们可以使用将在启动时执行的启动侦听器:
public class StartupListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// Init the app from in here...
}
}
我想知道采用哪种方法都存在哪些折衷。我对Spring Boot的“应用程序生命周期”了解不多,我想知道在这两种设置中是否都有/我将无法使用的东西。预先感谢!
答案 0 :(得分:2)
init
方法仅在启动后调用,并且仅在将应用程序作为命令行程序运行时才调用。
init
方法例如将应用程序部署为.war文件时不会调用。
每次触发ContextRefreshedEvent
时都会调用onApplicationEvent
方法,这在启动期间会发生,但以后可以再次调用。参见例如“ When is ContextRefreshedEvent fired in Spring?”
对于与init
方法更可比的事件,请使用ApplicationStartedEvent
。