Понимание жизненного цикла приложения Spring Boot и слушателей запуска - PullRequest
1 голос
/ 25 сентября 2019

В Sprint Boot 2.x мы можем инициализировать наше приложение одним из 2 подходов:

@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 Ответ

2 голосов
/ 25 сентября 2019

Метод init вызывается только после запуска и вызывается только при запуске приложения в качестве программы командной строки.

Например, метод init не вызывается при развертывании приложения как.war file.

Метод onApplicationEvent вызывается всякий раз, когда срабатывает ContextRefreshedEvent, что происходит во время запуска, но может быть вызвано позже.См., Например, « Когда ContextRefreshedEvent запускается в Spring? »

Для более сопоставимого события с методом init используйте ApplicationStartedEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...