Gradle构建Spring Boot项目部署Tomcat 8.5访问Controller返回404求助
问题排查方案
1 优先检查访问路径是否正确
- 独立Tomcat部署war包时,默认会以war包名称作为上下文路径(Context Path),嵌入式启动时使用的是根路径
/,但部署到Tomcat后如果你的war包名为practice-0.0.1-SNAPSHOT.war,对应的访问路径应为:http://localhost:8080/practice-0.0.1-SNAPSHOT/healthCheck - 如果需要使用根路径访问,可以将war包重命名为
ROOT.war后放到Tomcat的webapps目录下,再重启Tomcat即可通过http://localhost:8080/healthCheck访问
2 修正build.gradle配置
当前构建配置存在两个问题,会导致war包部署异常:
2.1 新增war插件
要生成可部署到Tomcat的war包,需要在plugins块中添加war插件:
plugins { id 'org.springframework.boot' version '2.5.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' // 新增war插件 }
2.2 修改Tomcat starter的依赖范围
当前引入的spring-boot-starter-tomcat是implementation范围,会将嵌入式Tomcat的相关类打入war包,和独立Tomcat的类产生冲突,需要修改为providedRuntime:
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat:2.5.4' // 修改依赖范围 }
3 验证打包结果
修改配置后重新执行gradle clean bootWar命令打包,将生成在build/libs目录下的war包部署到Tomcat的webapps目录,等待Tomcat自动解压完成后再访问对应接口即可。
4 可选校验项
如果以上操作后仍有问题,可确认:
- 你的Controller类所在的包是否在启动类
PracticeApplication的同级包或子包下,确保Spring包扫描能正常加载到Controller(嵌入式启动正常的情况下该配置一般没问题) - 检查Tomcat的
logs/catalina.out日志,查看是否有Spring Boot启动异常的报错信息
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

