了解Spring Boot的应用程序生命周期和启动侦听器

时间:2019-09-25 15:59:22

标签: java spring-boot

在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的“应用程序生命周期”了解不多,我想知道在这两种设置中是否都有/我将无法使用的东西。预先感谢!

1 个答案:

答案 0 :(得分:2)

init方法仅在启动后调用,并且仅在将应用程序作为命令行程序运行时才调用。

init方法例如将应用程序部署为.war文件时不会调用。

每次触发ContextRefreshedEvent时都会调用onApplicationEvent方法,这在启动期间会发生,但以后可以再次调用。参见例如“ When is ContextRefreshedEvent fired in Spring?

对于与init方法更可比的事件,请使用ApplicationStartedEvent