Как выполнить пользовательский код до того, как мой сервлет начнет принимать запросы? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть веб-приложение Spring Boot, где я хочу запустить некоторый код, который генерирует данные и записывает их в базу данных во время запуска приложения, и я хочу убедиться, что приложение не обслуживает какие-либо веб-запросы до завершения генерации данных , Какой лучший хук для этого?

Я нашел документацию по нескольким хукам, которые могут быть тем, что я ищу, но из их документации не совсем ясно:

  • Реализация javax.servlet.ServletContextListener.contextInitialized()
  • Реализация org.springframework.context.ApplicationListener для прослушивания таких событий, как ApplicationPreparedEvent или ContextRefreshedEvent

Я могу попробовать эти хуки и другие, чтобы посмотрим, будут ли они делать то, что я хочу (и я сделаю), но я хочу сделать это «правильным» способом, а не просто закончить тем, что сработало.


Некоторые детали:

Когда я говорю «не обслуживает никакие веб-запросы», я имею в виду, что либо он еще не прослушивает порт (порты), где он в конечном итоге будет принимать запросы, либо он прослушивает и буферизует запросы, но блокирует до тех пор, пока мой код завершено, прежде чем пытаться действовать на любой из них. Если бы мне посчастливилось иметь выбор, последний вариант предпочтительнее, но было бы неплохо узнать, как выполнить sh.

Я не могу просто запустить этот код как отдельное выполнение перед началом мое приложение, потому что я генерирую данные в базу данных в памяти (H2), и факт их нахождения в памяти является важной частью проекта.

...