在本文中,我们将向你演示如何把Spring Boot应用程序打包为一个传统的WAR文件,并发布到Tomcat的servlet容器中。
在Spring Boot中,创建一个WAR文件并发布,需要3个步骤:
- 继承
SpringBootServletInitializer
类 - 标记内置的Servlet容器为Provided
- 更新打包方式为WAR
测试环境:
- Spring Boot 2.1.2.RELEASE
- Tomcat 8 与 9
- Maven 3
1. 继承SpringBootServletInitializer
类
为了便于读者进行对比,首先,我们来看一下使用JAR文件进行部署时对应的Application
类。
1.1 JAR文件方式部署
StartWebApplication.java
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StartWebApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(StartWebApplication.class, args);
}
}
接下来,再来看一下使用WAR文件部署对应的Application
类。
我们需要继承SpringBootServletInitializer
类,并重写其中的configure
方法。
StartWebApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class StartWebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(StartWebApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(StartWebApplication.class);
}
}
/*@SpringBootApplication
public class StartWebApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(StartWebApplication.class, args);
}
}*/
如果同时存在多个主类,还有指定被执行的主类:
pom.xml
<properties>
<!-- The main class to start by executing java -jar -->
<start-class>com.mkyong.SpringBootWebApplication</start-class>
</properties>
2. 标记内置的Servlet容器为Provided
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 标记内置的Servlet容器为Provided -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
3. 更改打包方式为WAR
pom.xml
<packaging>war</packaging>