背景:项目是纯springboot后台,前后端分离,平时都是打成jar包使用,因为有个特殊的需求,需要搞成war包部署在类似Tomcat的平台上,特此记录下
于是网上一顿搜索,大部分都是一下步骤:
1、配置pom文件配置成war包,去除springboot自带的tomcat
2、启动类继承SpringBootServletInitializer,重写configure方法
测试了一下,war包是打成功了,也在tomcat中成功部署了,但是有些线上环境上测试接口直接报404,但是偏偏本地用tomcat访问接口没问题,又是一顿折腾,终于解决了。
答案:pom文件中需要配置maven-war-plugin插件 有些环境会检验web.xml配置
详细配置步骤:
- pom配置 war包、去除自带的tomcat依赖、配置maven-war-plugin
<packaging>war</packaging>
<!-- 移除springboot中web模块的tomcat依赖 -->
<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>
<!-- 这个依赖让你能够在程序入口类:xxxAppAplication中直接执行main方法启动tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- 但是这里一定要设置为provided -->
<scope>provided</scope>
</dependency>
<build>
<finalName>appName</finalName>
<!-- 省略其他配置 -->
<plugins>
<plugin>
<configuration>
<excludeDevtools>true</excludeDevtools>
</configuration>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
- 启动类继承SpringBootServletInitializer,重写configure方法
@SpringBootApplication
public class A extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(A.class);
}
public static void main(String[] args) {
SpringApplication.run(A.class, args);
}
}
经测试没有问题,在tomcat中war成功部署,接口访问也正常,大功告成
引用:
标题为 Spring Boot 项目打成 war 包部署,接口报 404 问题 的下面两篇博客
https://www.cnblogs.com/54chensongxia/p/13730179.html
https://blog.csdn.net/qq_44660343/article/details/114820606