通过CLI配置Wildfly的xa-datasource运行时无法启用问题求助
根因说明
你遇到的问题核心是两个:一是弃用的enable操作只会修改domain.xml静态配置,不会主动触发Domain模式下运行节点的数据源服务实例化;二是profile配置变更后没有同步到运行中的server实例,导致JNDI资源没有实际注册,部署应用时无法找到对应数据源。
解决方案
步骤1:修正XA数据源创建命令,避免使用弃用操作
直接在add命令中携带enabled=true参数,无需后续单独调用:enable操作,修改后的创建命令如下:
/profile=full-ha/subsystem=datasources/xa-data-source=xxyyDS:add( use-java-context=true, use-ccm=false, driver-name=com.mysql, transaction-isolation=TRANSACTION_READ_COMMITTED, min-pool-size=15, max-pool-size=150, pool-prefill=true, flush-strategy=IdleConnections, valid-connection-checker-class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker", stale-connection-checker-class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker", exception-sorter-class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter", set-tx-query-timeout=true, blocking-timeout-wait-millis=5000, idle-timeout-minutes=1, query-timeout=300, prepared-statements-cache-size=100, share-prepared-statements=true, jndi-name="java:jboss/datasources/xxyyDS", user-name=jboss, password="${VAULT::ds_MySqlDS::password::1}", enabled=true )
后续的XA属性添加命令保持不变,删除原命令最后的/profile=full-ha/subsystem=datasources/xa-data-source=xxyyDS:enable调用即可。
步骤2:运行时触发数据源激活(无需重启服务)
完成所有XA属性配置后,执行以下操作完成运行时生效:
- 如果你使用Domain模式,先触发对应Server Group的配置热重载(不会中断正在运行的业务服务),将profile的配置变更同步到所有关联的server实例:
/server-group=你的ServerGroup名称:reload-servers(running-mode=NORMAL)
- 执行数据源连接池测试命令,触发JNDI资源注册和连接池初始化:
# 通用测试命令 /profile=full-ha/subsystem=datasources/xa-data-source=xxyyDS:test-connection-in-pool # 如果上述命令报错找不到资源,指定具体节点执行 /host=你的Host名称/server=你的Server名称/subsystem=datasources/xa-data-source=xxyyDS:test-connection-in-pool
执行后返回成功提示则说明数据源已经正常激活,JNDI路径已注册,可以直接部署ear应用。
无重载应急方案
如果当前Server Group上的业务不允许触发组重载,可以用write-attribute操作手动触发配置生效,替换原来的enable调用:
/profile=full-ha/subsystem=datasources/xa-data-source=xxyyDS:write-attribute(name=enabled, value=true)
执行后等待10-30秒待配置自动同步到所有节点,再执行连接测试命令验证生效即可。
内容的提问来源于stack exchange,提问作者ganesh
相关产品推荐
相关产品推荐

