Как реализовать запуск сервлета одновременно с запуском приложения
Для запуска сервлета при старте приложения (а не при первом запросе клиента) используется параметр load-on-startup в web.xml или атрибут loadOnStartup в аннотации @WebServlet. Значение этого параметра определяет порядок загрузки: чем меньше число, тем раньше сервлет загружается.
Пример
<servlet>
<servlet-name>ExampleServlet</servlet-name>
<servlet-class>xyz.company.ExampleServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Или через аннотацию:
Пример
@WebServlet(urlPatterns = "/example", loadOnStartup = 1)
public class ExampleServlet extends HttpServlet { }
Если значение отрицательное или не задано — сервлет загружается лениво, при первом запросе. Если положительное или 0 — загружается при старте контейнера. Сервлеты с меньшим числом загружаются раньше. Это полезно, когда инициализация сервлета занимает много времени (подключение к внешним сервисам, прогрев кэша), и нежелательно, чтобы первый пользователь ждал.
На собеседовании: вопрос проверяет знание ленивой vs жадной инициализации. Укажите, что в Spring Boot
DispatcherServletзагружается сloadOnStartup = -1по умолчанию (ленивая загрузка), но это можно изменить.