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

Spring Boot升级至2.6.6后,外部Tomcat部署WAR包失败

问题原因

Spring Boot 2.x 与 1.5.x 在外部 Servlet 容器(如 Tomcat)部署时,对context-path配置的处理逻辑存在关键差异:

  • 1.5.x 版本中,server.context-path配置会覆盖外部容器的上下文路径(由 WAR 包名称决定),因此即使 WAR 包名为admin.war,实际上下文路径仍以 Spring Boot 的配置为准。
  • 2.x 版本起,外部容器部署时,server.servlet.context-path配置会被忽略,上下文路径完全由外部容器决定(即 WAR 包名称admin.war对应路径/admin)。此时若保留该配置,会导致 Spring Boot 内部的请求映射路径叠加容器上下文路径,出现/admin/admin/xxx这类无效路径,从而触发「No mapping found」错误。
解决方案

1. 移除外部部署时的context-path配置

直接删除application.properties中的server.servlet.context-path=/admin配置:

  • 外部 Tomcat 部署时,上下文路径由 WAR 包名称决定为/admin,控制器的@RequestMapping("/xxx")对应访问路径/admin/xxx,与 1.5.x 版本的访问逻辑一致。
  • 若需本地运行 JAR 包时保留上下文路径,可通过多环境配置实现:
    • 创建application-local.properties,添加server.servlet.context-path=/admin
    • 本地运行时激活local环境(如 IDE 配置spring.profiles.active=local),部署到 Tomcat 时使用默认环境即可。

2. 确认主类配置正确

确保继承SpringBootServletInitializer的主类配置无误,示例代码:

@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(AdminApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

该配置负责在外部容器中初始化 Spring Boot 应用,需确保主类所在包能正确扫描所有控制器和配置类。

3. 适配路径匹配策略(可选)

Spring Boot 2.6.x 默认启用严格的路径匹配策略PATH_PATTERN_PARSER,若控制器路径写法(如通配符、斜杠处理)与旧版本不兼容,可添加以下配置切换回 1.5.x 使用的ANT_PATH_MATCHER:

spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:06:21