Вызовите ApplicationListener до запуска веб-сервера

#java #spring #spring-boot

Вопрос:

У меня есть недолговечный процесс для чтения простого файла из пути к классу в память, я решил ApplicationListener<ApplicationReadyEvent> позволить spring запустить задачу:

 @Component
@Priority(1)
class MyLoader implements ApplicationListener<ApplicationReadyEvent> {

  @Override
  public void onApplicationEvent(ApplicationReadyEvent event) {
    doStuff();
  }

}
 

Я понял, что не так уж мало HTTP-запросов, которые я предлагаю в этом приложении, зависят от этих данных в памяти. Как я могу принудительно MyLoader выполнить класс до того, как веб-сервер будет готов выполнить запрос? Я понятия не имею, как определить эту зависимость?

Ответ №1:

Вы должны прослушать событие до ApplicationReadyEvent , потому что оно является последним, отмечая, что приложение готово к обслуживанию запросов.

Например, вы можете слушать ApplicationStartingEvent . Смотрите список доступных событий приложений здесь.

Комментарии:

1. Есть ли какой-либо способ четко установить эту зависимость, я даже не могу найти никакой информации о том, какое событие запускается после запуска контейнера сервлета.