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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:22:45