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 排除 内嵌的 Web 容器。
默认使用内嵌 Tomcat Web 容器。如果此前你使用了内嵌的 Jetty 、 Undertow ,请务必清除相关的 Starter 依赖。然后我们可以使用两种方式来处理:
- 方法一
Spring Boot
内嵌的
Tomcat
默认已经集成在
spring-boot-starter-web
包里,所以我们要排除掉它。