1. Обзор
В этом руководстве мы кратко рассмотрим SpringBootServletInitializer
.
Это расширение WebApplicationInitializer
, которое запускает SpringApplication
из традиционного архива WAR , развернутого в веб-контейнере. Этот класс связывает компоненты Servlet
, Filter
и ServletContextInitializer
из контекста приложения с сервером.
Расширение класса SpringBootServletInitializer
также позволяет нам настраивать наше приложение, когда оно запускается контейнером сервлета, путем переопределения метода configure() .
2. Инициализатор SpringBootServlet
Для большей практичности мы покажем пример основного класса, который расширяет класс Initializer
.
Наш класс @SpringBootApplication с именем WarInitializerApplication
расширяет
класс SpringBootServletInitializer
и переопределяет метод configure()
. Этот метод использует SpringApplicationBuilder
, чтобы просто зарегистрировать наш класс как класс конфигурации приложения:
@SpringBootApplication
public class WarInitializerApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(WarInitializerApplication.class);
}
public static void main(String[] args) {
SpringApplication sa = new SpringApplication(
WarInitializerApplication.class);
sa.run(args);
}
@RestController
public static class WarInitializerController {
@GetMapping("/")
public String handler() {
// ...
}
}
}
Теперь, если мы упакуем наше приложение как WAR, мы сможем развернуть его в любом веб-контейнере традиционным способом, который также будет выполнять логику, которую мы добавили в методе configure() .
Если мы хотим упаковать его в виде JAR-файла, нам нужно добавить ту же логику в метод main()
, чтобы встроенный контейнер также мог его забрать.
3. Заключение
В этой статье мы представили SpringBootServletInitializer
и продемонстрировали, как мы можем использовать его для запуска приложений Spring Boot из классического архива WAR.
Полный исходный код примера доступен на GitHub. Это проект на основе Maven, поэтому его можно импортировать и использовать как есть.