Gymterview
junior

Как реализовать запуск сервлета одновременно с запуском приложения

Для запуска сервлета при старте приложения (а не при первом запросе клиента) используется параметр 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 по умолчанию (ленивая загрузка), но это можно изменить.