WildFly 35配置MySQL数据源报错:缺失jboss.jdbc-driver.com_mysql
WildFly 35配置MySQL DataSource驱动识别失败问题排查与解决
问题描述
启动WildFly 35时,配置MySQL DataSource触发如下报错:
("subsystem" => "datasources"), ("data-source" => "MySQLDS") ]) - failure description: { "WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.com_mysql"], "WFLYCTL0180: Services with missing/unavailable dependencies" => [ "service jboss.data-source.\"jboss.naming.context.java.jboss.datasources.MySQLDS\" is missing [jboss.jdbc-driver.com_mysql]", "service jboss.driver-demander.java:jboss/datasources/MySQLDS is missing [jboss.jdbc-driver.com_mysql]" ] }
当前配置
- standalone.xml 配置片段:
<datasources> <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:mysql://localhost:3306/examdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false</connection-url> <driver>com.mysql</driver> <security user-name="root" password="pwd"/> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <driver-class>com.mysql.cj.jdbc.Driver</driver-class> </driver> </drivers> </datasources> </subsystem>
- module.xml 配置(路径:
{WILDFLY_HOME}/modules/system/layers/base/com/mysql/main/):
<module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-j-8.0.33.jar"/> </resources> <dependencies> <module name="jakarta.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
MySQL驱动包mysql-connector-j-8.0.33.jar已放置在上述com/mysql/main/目录下。
已执行的排查步骤
- 验证驱动JAR包存在且路径与module.xml配置一致
- 修改配置后均重启WildFly
- 检查module.xml语法及依赖项
WildFly管理控制台显示:数据源已存在但因缺失jboss.jdbc-driver.com_mysql标记为无效。
疑问
- 为何WildFly无法识别MySQL驱动模块?
- 针对WildFly 35兼容性,是否遗漏了额外配置步骤?
- 如何解决该问题,成功配置MySQL DataSource?
注:WildFly 35支持Jakarta EE 9/10,应用依赖Jakarta包而非javax包,不确定是否影响驱动注册。
问题原因与解决方案
1. 驱动识别失败的核心原因
你的配置存在两个关键问题:
- 驱动名称不匹配:数据源配置中
<driver>com.mysql</driver>指定的驱动名称,与<drivers>节点下驱动的name="mysql"不一致,WildFly无法关联到对应驱动服务,触发缺失jboss.jdbc-driver.com_mysql的错误 - 依赖版本不兼容:WildFly 35基于Jakarta EE 10,仍使用
javax.transaction.api依赖会导致模块加载异常
2. WildFly 35兼容性注意点
WildFly 35全面适配Jakarta EE 10,所有原javax前缀的API依赖必须替换为jakarta版本;同时驱动配置的名称必须严格保持一致,否则无法建立关联。
3. 具体修复步骤
步骤1:修正standalone.xml的驱动名称匹配
将数据源的<driver>值与<drivers>节点下的驱动name统一,二选一即可:
<!-- 方式1:修改数据源的driver值为mysql --> <datasource ...> ... <driver>mysql</driver> ... </datasource> <!-- 方式2:统一驱动名称为com.mysql --> <drivers> <driver name="com.mysql" module="com.mysql"> <driver-class>com.mysql.cj.jdbc.Driver</driver-class> </driver> </drivers>
步骤2:更新module.xml的Jakarta依赖
将javax.transaction.api替换为Jakarta版本:
<module xmlns="urn:jboss:module:1.1" name="com.mysql"> <resources> <resource-root path="mysql-connector-j-8.0.33.jar"/> </resources> <dependencies> <module name="jakarta.api"/> <module name="jakarta.transaction.api"/> <!-- 替换原javax依赖 --> </dependencies> </module>
步骤3:验证驱动模块加载
通过WildFly CLI验证驱动是否成功加载:
# 进入WildFly CLI ./bin/jboss-cli.sh --connect # 查询已加载的JDBC驱动 /subsystem=datasources/jdbc-driver=mysql:read-resource
返回正常驱动信息则说明模块加载成功。
步骤4:重启并测试数据源
重启WildFly后,通过CLI测试数据源连接:
/subsystem=datasources/data-source=MySQLDS:test-connection-in-pool
返回{outcome => success}则配置生效。
内容的提问来源于stack exchange,提问作者Mohamed Mahdi
相关产品推荐
相关产品推荐

