Wildfly 22连接池数据库重启后无法重连问题求助
Wildfly 22连接池无法自动重连问题修复方案
针对数据库重启/网络中断后连接池无法自动恢复、仍返回已关闭连接的问题,可通过以下配置调整和优化解决:
1. 增强失效连接回收机制
在现有validation配置基础上添加主动回收失效连接的参数,确保后台验证能及时清理无效连接:
<validation> <check-valid-connection-sql>select 1</check-valid-connection-sql> <validate-on-match>false</validate-on-match> <background-validation>true</background-validation> <background-validation-millis>10000</background-validation-millis> <remove-abandoned>true</remove-abandoned> <remove-abandoned-timeout>30</remove-abandoned-timeout> <!-- 30秒未使用的连接将被回收 --> <abandoned-timeout>60</abandoned-timeout> <log-abandoned>true</log-abandoned> <!-- 可选,记录回收日志用于排查 --> </validation>
2. 启用连接获取时的验证兜底
将validate-on-match设为true,确保每次从连接池获取连接时都做有效性校验,避免拿到已关闭的连接(可结合后台验证平衡性能与可靠性):
<validate-on-match>true</validate-on-match>
3. 配置数据库专属的连接校验器
根据使用的数据库类型添加对应的连接校验器、失效检测和异常分类器,提升Wildfly对连接状态的识别准确性。以MySQL为例:
<validation> <valid-connection-checker-class-name>org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker</valid-connection-checker-class-name> <check-valid-connection-sql>select 1</check-valid-connection-sql> <validate-on-match>true</validate-on-match> <background-validation>true</background-validation> <background-validation-millis>10000</background-validation-millis> <stale-connection-checker-class-name>org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLStaleConnectionChecker</stale-connection-checker-class-name> <exception-sorter-class-name>org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter</exception-sorter-class-name> </validation>
其他数据库可替换为对应扩展类,比如PostgreSQL使用org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker。
4. 确保JDBC驱动版本兼容
检查并升级JDBC驱动至与Wildfly 22、数据库版本匹配的稳定版本,旧版本驱动可能存在连接状态检测的bug,导致无法触发自动重连。
5. 优化连接池基础配置
调整连接池的最小连接数并关闭预填充,避免启动时创建过多固定连接,导致失效后无法及时替换:
<pool> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <prefill>false</prefill> </pool>
内容的提问来源于stack exchange,提问作者Lonzak
相关产品推荐
相关产品推荐

