1. 修改部署web模块pom
只需修改部署web模块,需要修改打包方式和spring-boot-starter-tomcat依赖scope,其他依赖模块依然使用jar方式,相关依赖会打包到war中
<packaging>war</packaging>
<!-- ...... -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- ...... -->
</dependencies>
让默认内嵌容器的tomcat的依赖范围改为provided,打包时不包含相关依赖
2. 修改Spring Boot 启动类
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
启动类继承SpringBootServletInitializer,重写configure方法,让Servlet容器启动时启动Spring Boot
3. 使用maven打包war文件
在项目根目录执行 mvn clean package
执行成功后target目录中会有生成的xxx.war 可以部署到tomcat中访问项目
其他说明
-
测试Spring Boot 版本: 2.1.7.RELEASE
-
测试Tomcat版本: 9.0.x
-
mvn package可能报jdk相关错误(No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?),一般是环境变量配置问题,或者使用IDEA内置maven,jdk配置不一致等也可能编译不成功。推荐使用独立配置的mvn打包
-
Spring Boot项目一般都属部署到指定端口根目录,需要将tomcat等容器根应用设置为当前war项目,例如在tomcat 中,在config/server.xml中Host里添加Context
<Context path="" docBase="appName" reloadable="true" />
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- ...... -->
<Context path="" docBase="appName" reloadable="true" />
</Host>