Azure App Service部署Spring应用后Controller出现404 NotFound问题求助
针对你用Gradle Azure插件部署Spring应用到Azure App Service后出现的404问题,可按以下步骤排查解决:
确认打包方式为WAR并排除内置Tomcat
因为你指定了外部Tomcat作为web容器,Spring Boot默认的JAR包无法直接适配外部Tomcat,需改为WAR打包,并排除内置Tomcat依赖。在build.gradle中添加以下配置:apply plugin: 'war' dependencies { // 排除内置Tomcat,由外部Tomcat提供 providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' // 其他依赖... }修改启动类继承SpringBootServletInitializer
WAR包部署到外部Tomcat时,启动类需要继承SpringBootServletInitializer并重写configure方法,确保Spring应用能被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); } }检查访问路径是否包含WAR包名称
部署到Tomcat后,默认访问路径需要加上WAR包的名称(除非你将WAR包命名为ROOT.war)。例如你的WAR包名为myapp.war,则正确的端点访问路径应为:https://<your-app-name>.azurewebsites.net/myapp/any
你可以在Azure门户的Deployment Center中查看部署的文件结构,确认webapps目录下的WAR包名称。查看应用启动日志排查错误
登录Azure门户,进入你的App Service,通过Log Stream或Advanced Tools -> Go -> Debug console -> Bash查看Tomcat启动日志和Spring应用日志,检查是否有启动失败、依赖缺失或配置错误的信息。常见日志路径:- Tomcat日志:
/home/site/wwwroot/logs - Spring应用日志:
/home/site/wwwroot/webapps/<your-war-name>/WEB-INF/logs
- Tomcat日志:
验证Runtime Stack配置
在Azure门户的Configuration -> General settings中,确认Runtime stack设置为Java 17+Tomcat 10.0,确保和你build.gradle中的配置一致,避免版本不兼容问题。
内容的提问来源于stack exchange,提问作者Coriver

