Spring Boot 2.2.5部署外部Tomcat时用户接口返回404问题排查
问题基础信息
- 项目技术栈:Spring Boot 2.2.5.RELEASE 开发的Web应用,构建产物为War包,部署于公网独立Tomcat服务器
- 部署状态:同Tomcat下部署的其余War应用运行无异常,当前应用的上下文路径为War包名称
tool,即所有接口的访问前置路径为/tool
异常表现
- 本地运行状态正常:直接启动应用内置Tomcat时,访问
http://localhost:8080/api/v1/users可正常完成用户数据的查询、新增、删除操作,业务逻辑响应符合预期 - 线上部署触发404:携带上下文路径访问
http://31.134.12.356:9080/tool/api/v1/users时,用户相关的REST接口统一返回404,响应报文为:
{"timestamp": "2021-01-24T06:45:42.144+00:00","status": 404,"error": "Not Found","message": "","path": "/tool/api/v1/users"}
- 异常范围固定:应用内除用户相关接口外,其余所有REST接口均可正常访问,不存在全局路由配置失效的问题
根因排查方向
- 核查Controller注解配置:检查UserController类上的
@RestController、类级@RequestMapping注解配置,确认和其他可正常访问的接口类的配置规则一致,避免注解参数拼写错误导致路由映射失败 - 校验组件扫描范围:核对主启动类
@SpringBootApplication的默认扫描路径、自定义@ComponentScan的扫描范围,确认UserController所在包路径在扫描覆盖范围内;同时解压线上部署的War包,检查WEB-INF/classes路径下是否存在UserController对应的编译class文件,排除Maven打包时因资源过滤规则导致类文件遗漏的问题 - 核对上下文路径配置:检查
application.properties中的server.servlet.context-path配置项,确认未出现上下文路径重复叠加的问题——独立Tomcat已为War包分配/tool的上下文路径时,应用内无需再重复配置相同路径,否则实际路由会变为/tool/tool/api/v1/users,与访问路径不匹配触发404 - 验证Web初始化逻辑:检查自定义
SpringBootServletInitializer的实现配置,确认独立Tomcat启动应用时,UserController对应的Bean定义可被正确加载并注册到Spring容器
内容的提问来源于stack exchange,提问作者Raymond Mumo
相关产品推荐
相关产品推荐

