Spring Boot3.4.2+Java21部署Tomcat10/11后接口无响应排查
Spring Boot 3.4.2 WAR部署Tomcat 10/11后Web接口无响应排查方案
1. 核心打包配置检查
- 主类必须继承
SpringBootServletInitializer并覆盖configure方法,确保Spring Boot能在Tomcat容器中启动:@SpringBootApplication public class YourApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(YourApplication.class); } public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } - 确认
spring-boot-starter-tomcat依赖的scope为provided,避免WAR包携带Tomcat核心Jar包导致冲突:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> - 多模块项目要检查
spring-boot-maven-plugin配置,明确指定主类位置,确保打包时正确识别启动类:<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.your.package.YourApplication</mainClass> </configuration> </plugin>
2. 接口访问路径验证
- 访问接口必须带上Tomcat部署的上下文路径(即WAR包名称,除非在
server.xml中配置path=""),例如WAR包名为my-app.war,接口/api/hello的完整路径应为http://localhost:8080/my-app/api/hello - 检查
application.properties中的server.servlet.context-path配置,避免和Tomcat上下文路径重复叠加,导致路径匹配失败 - 查看Tomcat日志中
Mapping servlet: 'dispatcherServlet'相关输出,确认Spring MVC的DispatcherServlet是否正确映射到/*或预期路径
3. Spring组件扫描与注解检查
- 多模块项目中,主类的
@SpringBootApplication需通过scanBasePackages覆盖所有包含@RestController的模块包,示例:@SpringBootApplication(scanBasePackages = {"com.your.module.web", "com.your.module.service"}) - 核对
@RestController类上的@RequestMapping/@GetMapping等注解,避免路径拼写错误(比如多写/少写斜杠) - 检查自定义
WebMvcConfigurer配置,确认未修改请求映射规则或添加了拦截器导致请求无法到达控制器
4. Tomcat兼容性与类加载排查
- Spring Boot 3.x依赖Jakarta EE 9+,必须使用Tomcat 10.1.x及以上版本,避免版本不匹配引发类加载异常
- 查看Tomcat的
catalina.log和localhost.log,搜索ClassNotFoundException/NoClassDefFoundError,重点排查Spring MVC相关类的加载问题 - 用
mvn dependency:tree检查依赖树,排除WAR包中重复的Servlet API依赖(比如javax.servlet-api,Spring Boot 3.x应使用jakarta.servlet-api)
5. 网络与请求日志验证
- 用
curl或Postman直接访问服务器IP+端口+完整接口路径,排除本地浏览器缓存、代理的干扰 - 查看Tomcat的
access.log,确认请求是否到达服务器:如果日志无记录,说明请求被防火墙、反向代理或Tomcat端口配置拦截 - 检查
conf/server.xml的Connector配置,确认端口、协议(HTTP/1.1)正确,且address设置为0.0.0.0允许外部访问
内容的提问来源于stack exchange,提问作者KoloM
相关产品推荐
相关产品推荐

