在JBOSS EAP 7.4中配置MySQL数据源时遇到启动错误
JBOSS EAP 7.4 MySQL数据源启动报错排查
报错信息
每次启动服务器都会出现以下错误:
ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([ ("subsystem" => "datasources"), ("data-source" => "MySqlDS") ]) - failure description: { "WFLYCTL0412: Required services that are not installed:" => [ "jboss.jdbc-driver.mysql", "jboss.jdbc-driver.mysql" ], "WFLYCTL0180: Services with missing/unavailable dependencies" => [ "jboss.driver-demander.java:jboss/datasources/MySqlDS is missing [jboss.jdbc-driver.mysql]", "org.wildfly.data-source.MySqlDS is missing [jboss.jdbc-driver.mysql]", "org.wildfly.data-source.MySqlDS is missing [jboss.jdbc-driver.mysql]" ] }
当前配置情况
我正在JBOSS EAP 7.4中配置带JNDI的MySQL数据源,已完成以下操作:
- 创建
module.xml并将MySQL驱动jar包放在com/mysql/main目录下:
<?xml version='1.0' encoding='UTF-8'?> <module xmlns="urn:jboss:module:1.9" name="com.mysql"> <properties> <property name="jboss.api" value="unsupported"/> </properties> <resources> <resource-root path="mysql-connector-java-8.0.30.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> <module name="javax.servlet.api" optional="true"/> </dependencies> </module>
- 在
standalone.xml中添加数据源及驱动配置:
<subsystem xmlns="urn:jboss:domain:datasources:6.0"> <datasources> <datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/bookshopdb</connection-url> <driver-class>com.mysql.cj.jdbc.Driver</driver-class> <driver>mysql</driver> <new-connection-sql>SELECT 1</new-connection-sql> <pool> <min-pool-size>0</min-pool-size> <max-pool-size>10</max-pool-size> <flush-strategy>IdleConnections</flush-strategy> </pool> <security> <user-name>root</user-name> <password>root</password> </security> <validation> <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> <validate-on-match>true</validate-on-match> </validation> </datasource> <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <driver-class>com.mysql.cj.jdbc.Driver</driver-class> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem>
解决方案
报错核心是JBOSS无法识别MySQL驱动模块,导致jboss.jdbc-driver.mysql服务缺失,按以下步骤排查修复:
1. 确认模块目录结构合规
驱动模块必须放在JBOSS安装目录的modules/system/layers/base/com/mysql/main下,目录层级要完全匹配:
modules └── system └── layers └── base └── com └── mysql └── main ├── mysql-connector-java-8.0.30.jar └── module.xml
2. 校验jar包与配置文件名一致
确保module.xml中<resource-root path="mysql-connector-java-8.0.30.jar"/>的文件名和实际jar包完全一致,Linux环境下注意大小写敏感。
3. 修正XA驱动类(适配MySQL 8.0+)
MySQL 8.0+的XA数据源类已更新,将standalone.xml中的驱动配置修改为:
<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>
4. 补充模块依赖
MySQL 8.0+驱动需要额外依赖,在module.xml的<dependencies>中新增:
<module name="javax.xml.bind.api"/>
5. 重新加载模块或重启服务器
- 可通过JBOSS CLI命令热加载模块:
module reload --name=com.mysql - 若热加载无效,停止服务器后清理
standalone/tmp和standalone/data目录,再重新启动。
6. 用CLI自动配置(可选)
手动修改配置易出错,推荐用JBOSS CLI命令一键配置:
- 启动服务器后连接CLI:
./jboss-cli.sh -c - 执行以下命令:
module add --name=com.mysql --resources=/path/to/mysql-connector-java-8.0.30.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api,javax.xml.bind.api /subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql,driver-module-name=com.mysql,driver-class-name=com.mysql.cj.jdbc.Driver) /subsystem=datasources/data-source=MySqlDS:add(jndi-name=java:jboss/datasources/MySqlDS,connection-url=jdbc:mysql://localhost:3306/bookshopdb,driver-name=mysql,user-name=root,password=root)
内容的提问来源于stack exchange,提问作者Sovan Banerjee
相关产品推荐
相关产品推荐

