Краткое введение в SpringBootServletInitializer
1. обзор
В этом руководстве мы быстро познакомимся сSpringBootServletInitializer.
Это расширениеWebApplicationInitializer, котороеruns a SpringApplication from a traditional WAR archive развернуто в веб-контейнере. Этот класс связывает bean-компонентыServlet,Filter иServletContextInitializer из контекста приложения с сервером.
Расширение классаSpringBootServletInitializer также позволяет нам настраивать наше приложение, когда оно запускается контейнером сервлета, путем переопределения методаconfigure().
2. SpringBootServletInitializerс
Для большей практичности мы покажем пример основного класса, расширяющего класс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.
Доступен полный исходный код примераover on GitHub. Это проект на основе Maven, поэтому его можно импортировать и использовать как есть.