Spring Boot应用部署至独立Tomcat:bootWar构建WAR包后404问题解决
解决Spring Boot WAR包部署到独立Tomcat的404问题
要将Spring Boot应用正确打包为可部署到独立Tomcat的WAR包,需要完成以下几项关键配置修改:
1. 调整项目构建配置,适配WAR打包
Maven(pom.xml)
- 将打包方式设为
war:
<packaging>war</packaging>
- 标记嵌入式Tomcat依赖为
provided,避免与独立Tomcat的容器依赖冲突:
<dependencies> <!-- 保留原有业务、Spring Boot核心依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> </dependencies>
- 确保
spring-boot-maven-plugin配置正确,用于生成标准可部署WAR:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
Gradle(build.gradle)
- 引入
war插件并设置打包类型:
plugins { id 'war' id 'org.springframework.boot' version '你的Spring Boot版本号' id 'io.spring.dependency-management' version '对应依赖管理版本' }
- 标记嵌入式Tomcat为
providedRuntime:
dependencies { // 保留原有业务依赖 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' }
2. 修改主应用类,继承SpringBootServletInitializer
外部Servlet容器(如独立Tomcat)需要通过SpringBootServletInitializer来初始化Spring上下文,替代嵌入式容器的启动逻辑。修改你的主启动类:
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 HelloWorldApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(HelloWorldApplication.class); } public static void main(String[] args) { SpringApplication.run(HelloWorldApplication.class, args); } }
3. 修正访问路径逻辑
部署到独立Tomcat后,访问路径需要加上应用上下文路径:
- 若WAR包名为
hello-world.war,Tomcat默认上下文路径为/hello-world,此时完整访问地址应为http://localhost:8080/hello-world/hello-world - 若想直接通过
http://localhost:8080/hello-world访问,可将WAR包重命名为ROOT.war(Tomcat默认根上下文),或在Tomcat的conf/server.xml中配置自定义上下文路径。
4. 检查版本兼容性
确保Spring Boot与独立Tomcat版本匹配:
- Spring Boot 3.x 需搭配Tomcat 10.x及以上(基于Jakarta EE API)
- Spring Boot 2.x 兼容Tomcat 8.5/9.x(基于Java EE API)
完成以上修改后,重新执行mvn clean package(Maven)或gradle clean war(Gradle)构建WAR包,将其放入Tomcat的webapps目录,启动Tomcat即可正常访问接口。
内容的提问来源于stack exchange,提问作者Gaetan L.
相关产品推荐
相关产品推荐

