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获取更多资讯