WildFly添加MySQL数据源时已装驱动却无可用MySQL选项的问题
WildFly 22 MySQL驱动缺失问题排查修复
- 第一处核心错误:
com/mysql/main/module.xml存在严重的XML标签闭合错位问题,当前写法会导致WildFly完全无法解析模块定义。原配置中<resource-root>标签未正确闭合、依赖段的两个<module>标签未正确闭合且错误嵌套,直接造成模块加载失败。
修正后的正确module.xml内容如下:<module name="com.mysql" xmlns="urn:jboss:module:1.5"> <resources> <resource-root path="mysql-connector-java-8.0.23.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module> - 第二处核心错误:驱动类、XA数据源类路径与8.0.23版本的Connector/J不匹配。当前配置中写的
com.mysql.jdbc.Driver、com.mysql.jdbc.jdbc2.optional.MysqlXADataSource是MySQL Connector 5.x版本的旧类路径,8.x版本的对应类已经迁移到cj包路径下:- 普通JDBC驱动类:
com.mysql.cj.jdbc.Driver - XA数据源实现类:
com.mysql.cj.jdbc.MysqlXADataSource
类路径不匹配会导致驱动类反射加载失败,直接被WildFly的驱动识别机制过滤,不在列表中展示。
- 普通JDBC驱动类:
- 第三处注意点:确认模块目录的文件结构完全合规。
wildfly-22.0.0.Final/modules/system/layers/base/com/mysql/main/目录下,必须同时存放和module.xml文件名完全匹配的mysql-connector-java-8.0.23.jar,不要把jar嵌套在子目录、也不要将module.xml放置到上层路径,避免类加载器找不到资源。 - 关于手动配置
standalone.xml的优化:WildFly 22支持自动识别符合SPI规范的JDBC驱动,只要模块结构、module.xml配置正确,服务器启动时会自动扫描jar包内的JDBC SPI标识,自动读取驱动版本、JDBC合规版本信息完成注册,不需要手动在<drivers>节点硬编码驱动定义。手动硬编码的配置如果和模块加载的类路径不匹配,反而会触发驱动加载冲突。
修正全部配置后,先完全终止WildFly进程,清空
standalone/tmp、standalone/data目录下的临时缓存文件,再重启服务,即可在驱动管理页面看到完整的MySQL驱动版本信息、JDBC合规标识,数据源配置页的驱动下拉列表也会正常出现MySQL选项。
内容的提问来源于stack exchange,提问作者Jimblim
相关产品推荐
相关产品推荐

