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

部署Spring Boot Java应用到Linux Azure App Service后访问异常排查

排查Spring Boot WAR部署到Azure App Service的404问题(无Maven Azure插件场景)

问题背景

按官方文档部署Spring Boot应用到Azure App Service时,先将pom.xml打包类型从JAR改为WAR,部署后访问返回404。先排查出JDK版本不兼容问题:本地用JDK18编译(类文件版本61.0),Azure初始配置JDK11(最高支持版本55.0),更换为JDK17+Tomcat10后版本错误消失,但404问题依旧。配置com.microsoft.azure:azure-webapp-maven-plugin重新部署后,应用正常访问,确认原流程缺少该插件配置是核心诱因。

核心原因分析

Azure App Service部署Java WAR应用时,若未使用官方Maven插件,需手动适配多项环境要求,而插件会自动处理这些细节:

  • 上下文路径匹配:插件自动将WAR包部署到Tomcat的webapps/ROOT目录,对应根路径访问;手动部署若未指定,WAR会以原文件名作为上下文路径(如myapp.war需通过https://<app-name>.azurewebsites.net/myapp访问)
  • 环境适配:自动配置Azure Tomcat的环境变量、启动参数,适配Spring Boot WAR包的运行要求
  • Spring Boot特殊配置校验:确保WAR包包含继承SpringBootServletInitializer的启动类(外部Tomcat部署Spring Boot的必要条件)

排查验证步骤

  1. 检查部署目录结构
    登录App Service的SSH终端,查看/home/site/wwwroot/webapps目录:

    • 若原部署的WAR包未解压到ROOT目录,而是以自定义名称存在(如Complete.war),则需通过https://<app-name>.azurewebsites.net/Complete访问,直接访问根路径会返回404
    • 对比插件部署后的目录结构,确认是否存在路径差异
  2. 校验Spring Boot WAR配置
    检查pom.xml和启动类:

    • 确认pom.xml中继承spring-boot-starter-parent,且打包类型为war,同时排除内置Tomcat依赖(若需外部Tomcat运行):
      <packaging>war</packaging>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
      </dependency>
      
    • 确认启动类继承SpringBootServletInitializer:
      @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);
          }
      }
      
  3. 查看Tomcat访问日志
    在App Service的日志系统中查看localhost_access_log.*.txt,确认请求的路径是否与部署的上下文路径匹配。若请求根路径/,但应用实际部署在/Complete上下文,就会返回404。

结论

原部署流程未使用Azure官方Maven插件,导致WAR包的部署路径、上下文配置未适配Azure App Service的Tomcat环境,即使解决了JDK版本问题,仍因路径不匹配返回404。官方插件会自动处理部署路径、环境配置等细节,确保应用在根路径正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:15:44