You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.7.7升级至3.0.2在Azure上遇Tomcat 404问题

可能的问题原因
  • Servlet API版本兼容问题:Spring Boot 3.x基于Jakarta EE 9,使用jakarta.servlet包,而2.x依赖的是javax.servlet。如果Azure App Service默认使用Tomcat 9及以下版本(仅支持javax.servlet),会导致请求无法被Spring的DispatcherServlet处理,直接返回404,且应用接收不到请求日志。
  • Actuator端点默认配置变更:Spring Boot 3.0收紧了Actuator端点的默认暴露规则,2.7.x默认可能暴露info端点,而3.0.x默认仅暴露health端点。若未主动配置management.endpoints.web.exposure.include=info,加上Azure路由未正确映射,会导致请求根本未到达应用。
  • Azure部署配置差异:比如部署包结构变化(3.x的fat jar是否与2.x一致)、启动命令错误,导致DispatcherServlet未完全加载;或者端口映射不匹配,Azure的WEBSITES_PORT与Spring Boot的server.port不一致,请求无法转发到应用。
  • Spring Web MVC自动配置变更:3.0.x调整了Web MVC的自动配置逻辑,若自定义过Web相关配置,升级后可能出现兼容性问题,导致请求无法被分发。
进一步调试方案
  • 确认Azure运行时Tomcat版本:检查Azure App Service的运行时栈,Spring Boot 3.x需要Tomcat 10+(支持Jakarta EE 9)。若当前是Tomcat 9及以下,切换到Tomcat 10,或确保部署的是Spring Boot自带嵌入式Tomcat的fat jar(而非war包)。
  • 显式配置Actuator端点:在application.properties或application.yml中添加以下配置,重启后重试请求:
    management.endpoints.web.exposure.include=info,health
    management.endpoint.info.enabled=true
    
  • 开启Tomcat级别的调试日志:除org.springframework.web外,添加Tomcat核心组件的DEBUG日志,查看请求是否到达Tomcat及处理流程:
    logging.level.org.apache.catalina=DEBUG
    logging.level.org.apache.tomcat=DEBUG
    
  • 验证端口与路由映射:检查Azure App Service的“应用设置”中WEBSITES_PORT是否与Spring Boot的server.port一致(默认8080);同时确认Azure的路由规则是否存在拦截,比如虚拟应用路径是否与应用上下文路径匹配。
  • 对比本地与Azure启动日志:重点查看3.0.2版本在Azure上的启动日志,是否包含Mapping servlet: 'dispatcherServlet' to [/]这类记录——如果缺失,说明DispatcherServlet未正确注册。
  • 检查部署包完整性:在Azure上解压部署的jar包,确认BOOT-INF/lib下包含spring-webmvc、jakarta.servlet-api等核心依赖,且版本符合Spring Boot 3.0要求。

内容的提问来源于stack exchange,提问作者marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:01:44