WildFly 11中添加Jedis模块作为数据源失败求助
问题:WildFly 11配置Redis数据源失败(使用Jedis 5.1.0)
操作步骤
- 创建Jedis模块目录并放置jar包:在
$JBOSS_HOME/modules/system/layers/base下创建org/redis/jdbc/main目录,放入jedis-5.1.0.jar。 - 编写Jedis模块的
module.xml:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.5" name="org.redis.jdbc"> <resources> <resource-root path="jedis-5.1.0.jar"/> </resources> <dependencies> <module name="org.apache.commons.pool2"/> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
- 创建commons-pool2模块:在
$JBOSS_HOME/modules/system/layers/base下创建org/apache/commons/pool2/main目录,放入commons-pool2-2.12.0.jar,并编写module.xml:
<module xmlns="urn:jboss:module:1.5" name="org.apache.commons.pool2"> <properties> <property name="jboss.api" value="private"/> </properties> <resources> <resource-root path="commons-pool2-2.12.0.jar"/> </resources> <dependencies> </dependencies> </module>
- 验证模块加载:通过jboss-cli执行命令确认模块加载:
--command="/core-service=module-loading:list-resource-loader-paths(module=org.redis.jdbc)"
- 配置数据源与驱动(在
standalone-ha.xml中):
数据源配置:
<datasource jta="true" jndi-name="java:jboss/datasources/REDISDS" pool-name="redisds" enabled="true" use-java-context="true"> <connection-url>jdbc:redis://REDIS_IP:6379</connection-url> <driver>redis</driver> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>SAME_AS_PASSWORD</user-name> <password>PASSWORD</password> </security> <validation> <background-validation>true</background-validation> <background-validation-millis>60000</background-validation-millis> <validate-on-match>true</validate-on-match> <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/> </validation> </datasource>
驱动配置(注释了不存在的类):
<driver name="redis" module="org.redis.jdbc"> <!-- <driver-class>redis.clients.jedis.JedisConnectionFactory</driver-class> --> <!-- <xa-datasource-class>redis.clients.jedis.RedisDataSource</xa-datasource-class> --> </driver>
启动错误信息
09:24:18,575 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([ ("subsystem" => "datasources"), ("data-source" => "redisds") ]) - failure description: { "WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.redis"], "WFLYCTL0180: Services with missing/unavailable dependencies" => [ "org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]", "jboss.driver-demander.java:jboss/datasources/REDISDS is missing [jboss.jdbc-driver.redis]" ] } 09:24:18,577 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([ ("subsystem" => "datasources"), ("data-source" => "redisds") ]) - failure description: { "WFLYCTL0412: Required services that are not installed:" => [ "jboss.jdbc-driver.redis", "jboss.jdbc-driver.redis" ], "WFLYCTL0180: Services with missing/unavailable dependencies" => [ "org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]", "jboss.driver-demander.java:jboss/datasources/REDISDS is missing [jboss.jdbc-driver.redis]", "org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]" ] }
问题结论
你的怀疑完全正确:Jedis并不是JDBC兼容驱动,它只是Redis的Java客户端库,并未实现JDBC规范要求的Driver或DataSource接口,因此无法作为JDBC数据源在WildFly的datasources子系统中配置使用。
你使用商业JDBC驱动成功配置的案例也验证了这一点——只有实现JDBC规范的驱动才能被WildFly的数据源管理系统识别加载。
若要在WildFly中集成Redis,推荐两种方式:
- 保留现有Jedis模块配置,在应用代码中直接通过Jedis客户端API操作Redis;
- 使用支持JDBC的Redis驱动(如开源的redis-jdbc-driver或合规商业驱动)来配置数据源。
内容的提问来源于stack exchange,提问作者Sudipta Roy
相关产品推荐
相关产品推荐

