Spring Boot 3.1.1 Kotlin应用部署Wildfly生产环境返回404求助
Kotlin Spring Boot 部署到Wildfly 404问题排查方案
针对本地访问正常、Wildfly部署后返回404的问题,结合Java版本同类应用可正常运行的情况,从以下几个方向逐一排查:
1. 缺少Spring Boot ServletInitializer子类(最可能原因)
Spring Boot打包为WAR部署到外部Servlet容器(如Wildfly)时,必须通过SpringBootServletInitializer让容器识别并启动Spring应用上下文。你的Kotlin代码中未实现该类,而Java版本应用大概率手动添加了这个类。
在项目中添加以下类:
package com.example.demo2 import org.springframework.boot.builder.SpringApplicationBuilder import org.springframework.boot.web.servlet.support.SpringBootServletInitializer class ServletInitializer : SpringBootServletInitializer() { override fun configure(application: SpringApplicationBuilder): SpringApplicationBuilder { return application.sources(Demo2Application::class.java) } }
2. 验证Wildfly上下文路径是否正确
检查Wildfly部署后的实际应用上下文路径:
- 登录Wildfly管理控制台,查看已部署应用的「Runtime Name」,确认访问路径中的
runtime-name与实际一致(例如你的WAR包名为demo2-0.0.1-SNAPSHOT.war,则上下文路径可能是demo2-0.0.1-SNAPSHOT,而非简化的demo2) - 尝试直接访问
server.ip:port/[实际runtime-name]/test/hi
3. 检查Kotlin编译配置有效性
虽然你的POM已配置kotlin-maven-allopen插件,仍需确认其正确生效:
- 编译后查看WAR包中
com/example/demo2下的class文件,确保Demo2Application和TestController类是非final的(Spring需要代理这些类,final类无法被CGLIB代理) - 若插件未生效,可尝试在
kotlin-maven-plugin的<args>中添加<arg>-Xplugin=org.jetbrains.kotlin.allopen</arg>强制启用插件
4. 确认Wildfly与Spring Boot版本兼容性
Spring Boot 3.1.1依赖Jakarta EE 9.0+,需确保Wildfly版本满足要求:
- Wildfly 27及以上版本支持Jakarta EE 9.1,适配Spring Boot 3.x
- 若使用Wildfly 26及以下版本,会因Jakarta API版本不兼容导致应用无法正常初始化,引发404
5. 查看Wildfly服务器日志定位异常
直接查看Wildfly的standalone/log/server.log日志文件:
- 搜索
ERROR或WARN关键字,检查应用启动时是否有类加载失败、Spring上下文初始化异常等错误 - 若存在
ClassNotFoundException或NoClassDefFoundError,可能是Wildfly自带库与Spring Boot依赖冲突导致
内容的提问来源于stack exchange,提问作者Shivam Kumar
相关产品推荐
相关产品推荐

