1. Обзор
В этом уроке мы быстро познакомимся с SpringBootServletInitializer .
Это расширение WebApplicationInitializer , которое запускает Spring-приложение из традиционного военного архива , развернутого в веб-контейнере. Этот класс связывает Servlet , Filter и ServletContextInitializer beans из контекста приложения на сервер.
Расширение класса SpringBootServletInitializer также позволяет нам настраивать наше приложение, когда оно запускается контейнером сервлета, переопределяя метод configure () .
2. SpringBootServletInitializer
Чтобы сделать это более практичным, мы покажем пример основного класса, который расширяет класс Initializer .
Наш @SpringBootApplication класс называется War Initializer Application расширяет 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, поэтому его можно импортировать и использовать как есть.