Spring Boot 2 в действии: развертывание в виде пакета War

Spring Boot задняя часть

1. Введение

Spring Bootобеспечивает встроенныйtomcat,undertow,jettyтриServlet Webконтейнер. Давайте вытащим его из коробки, быстро сJARначать одинWebзаявление. Но в некоторых сценариях нам также может понадобиться поместить нашSpring Bootконтейнер сWarв виде традиционного развертывания. В этом случае нам нужно использоватьSpringBootServletInitializerреализовать.

2. SpringBootServletInitializer

SpringBootServletInitializerдаWebApplicationInitializerреализация, которая развернута изWebТрадиции на контейнерахWARзапуск пакетаSpring Bootзаявление. Этот класс будетServlet,Filterа такжеServletContextInitializer BeanПривязать к серверу из контекста приложения.SpringBootServletInitializerКлассы также позволяют нам переопределятьSpringApplicationBuilder configure(SpringApplicationBuilder application)способ настройкиServletКонтейнеры запускают приложения.

3. Развертывание Spring Boot War

Далее мы подробно расскажемSpring Boot WarЭтапы развертывания.

3.1 Измените метод упаковки на War

ИсправлятьSpring BootПроэктpom.xmlФайл будет упакован какwar.

По умолчаниюjarСумкаjarмы вместо этого попалиwarСумкаwar

3.2 Исключение встроенных веб-контейнеров.

По умолчанию используется встроенныйTomcat Webконтейнер. Если вы ранее использовали встроенныйJetty,Undertow, обязательно очистите связанныйStarterполагаться. Тогда мы можем справиться с этим двумя способами:

  • метод первый

Spring Bootв линиюTomcatПо умолчанию уже интегрирован вspring-boot-starter-webмешок, так что мы собираемся исключить его.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

Таким образом мы кладемServlet Apiзависимости также исключены,SpringBootServletInitializerнужно зависеть отServlet Api, так что мы добавляем его (Важно отметить, что версия versionNumber совместима с вашей внешней версией Tomcat.).

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${versionNumber}</version>
        <scope>provided</scope>
    </dependency>

  • Способ второй

Мы представляемspring-boot-starter-tomcatПереопределить встроенный по умолчаниюTomcatи установить область (scope)Даprovided(компилировать, тестировать).

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <scope>provided</scope>
     </dependency>                      


3.3 Реализация интерфейса SpringBootServletInitializer

новыйSpringBootServletInitializerкласс реализацииServletInitializerследующим образом:

 package cn.felord.war;
 
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 
 /**
  * @author Felordcn
  */
 public class ServletInitializer extends SpringBootServletInitializer {
 
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
 
         return application.sources(WarSpringBootApplication.class);
     }
 
 }

вWarSpringBootApplicationдаSpring BootНачальный класс , ничем не отличается от оригинала:

 package cn.felord.war;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 /**
  * @author Felordcn
  */
 @SpringBootApplication
 public class WarSpringBootApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(WarSpringBootApplication.class, args);
     }
 
 }

3.4 Компиляция и упаковка

через команду mavenmvn clean packageВыполните компиляцию, подождите, вы получите${artifactId}-${version}.war, то можно запускать традиционным способом развертывания ВойныSpring Bootприменяемый.

4. Резюме

Общее военное развертываниеSpring Bootспособ не сложный. Если у вас есть какие-либо сомнения, см.DEMO ,DEMOВы можете подписаться на публичный аккаунт:FelordcnОтвечатьwarчтобы получить.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn