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

Spring Web应用从Tomcat迁移至WildFly部署报错求助

解决WildFly部署Spring应用时的JNDI数据源找不到问题

从你贴的错误栈里能一眼看出核心问题:WildFly应用服务器中没有配置jdbc/revomon_tracking和jdbc/tracking_position这两个JNDI数据源,导致Spring容器在初始化dataSource和dataSourcePosition这两个Bean时,找不到对应的JNDI资源,进而引发依赖注入失败,最终整个应用启动失败。

下面是一步步的解决方案:

1. 在WildFly中配置缺失的JNDI数据源

WildFly的数据源配置有两种常用方式,选你顺手的来:

方式一:通过WildFly管理控制台配置(图形化操作,更简单)

  • 打开WildFly管理控制台(默认地址是http://localhost:9990,需要先启用管理用户)
  • 导航到 Configuration > Subsystems > Datasources & Drivers > Datasources
  • 点击Add按钮,选择你使用的数据库类型(比如MySQL、PostgreSQL等),然后填写以下信息:
    • JNDI Name:必须严格和Spring配置里的一致,也就是jdbc/revomon_tracking和jdbc/tracking_position
    • Connection URL:你的数据库连接地址(比如jdbc:mysql://localhost:3306/revomon_tracking?useSSL=false)
    • Username/Password:数据库的登录凭证
  • 首先要确保对应的数据库驱动已经添加到WildFly中,如果没有,点击Install Driver上传驱动jar包
  • 配置完成后点击Test Connection验证连接是否正常,没问题的话保存并启用数据源

方式二:手动修改WildFly配置文件(适合习惯命令行的开发者)

找到WildFly安装目录下的standalone/configuration/standalone.xml(如果是域模式则修改domain.xml),找到<datasources>节点,添加以下配置:

<!-- 配置jdbc/revomon_tracking数据源,以MySQL为例 -->
<datasource jndi-name="jdbc/revomon_tracking" pool-name="revomon_tracking_pool" enabled="true" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/revomon_tracking?useSSL=false&amp;serverTimezone=UTC</connection-url>
    <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
    <driver>mysql</driver> <!-- 这个名字要和下面<drivers>里的驱动名称一致 -->
    <security>
        <user-name>your_db_username</user-name>
        <password>your_db_password</password>
    </security>
</datasource>

<!-- 配置jdbc/tracking_position数据源 -->
<datasource jndi-name="jdbc/tracking_position" pool-name="tracking_position_pool" enabled="true" use-java-context="true">
    <connection-url>jdbc:mysql://localhost:3306/tracking_position?useSSL=false&amp;serverTimezone=UTC</connection-url>
    <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
    <driver>mysql</driver>
    <security>
        <user-name>your_db_username</user-name>
        <password>your_db_password</password>
    </security>
</datasource>

同时,确保<drivers>节点下有对应数据库的驱动配置(以MySQL为例):

<driver name="mysql" module="com.mysql">
    <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
    <xa-datasource-class>com.mysql.cj.jdbc.MysqlXADataSource</xa-datasource-class>
</driver>

如果是手动配置驱动,还需要把数据库驱动jar包放到WildFly的modules/system/layers/base/com/mysql/main目录下,并创建module.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-8.0.33.jar" /> <!-- 替换成你的驱动版本 -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

2. 验证Spring配置中的数据源引用

打开你的application-context-repository.xml,检查dataSource和dataSourcePosition的配置,确保JNDI名称和WildFly中配置的完全一致,并且添加resourceRef="true"适配Java EE容器的JNDI环境:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/revomon_tracking" />
    <property name="resourceRef" value="true" />
</bean>

<bean id="dataSourcePosition" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/tracking_position" />
    <property name="resourceRef" value="true" />
</bean>

3. 重启WildFly并重新部署应用

完成以上配置后,重启WildFly服务器,然后重新部署你的Spring应用,这个JNDI找不到的问题应该就能解决了。

补充说明:Tomcat和WildFly的数据源配置体系完全不同,Tomcat通常在context.xml中配置<Resource>,而WildFly使用自己的数据源管理机制,所以从Tomcat迁移到WildFly时,必须重新配置数据源,这是常见的迁移坑点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:00:34