数据库连接池连接超时异常断开的问题。提出以下解决思路
1.延长maxLifetime大小
注: maxLifetime 设置一个connection在连接池中的存活时间 默认30分钟 ,如果设置为0,表示存活时间无限大。如果不等于0且小于30秒则会被重置回30分钟。
2.更改配置 allowPoolSuspension: true
registerMbeans: true
效果 当池被暂停时,调用 getConnection()将不会超时,并将一直保持到池恢复为止。SQL执行都会被保留下来,软驱除现有连接之后,一直保持到池恢复Resume时,这些SQL依然会继续执行,也就是说并不会丢数据。缺点长期阻塞该参数存在让服务卡死的风险。
附 参数涉及到的相关代码
// 池中连接最长生命周期 设置最少3000
if (maxLifetime != 0 && maxLifetime < SECONDS.toMillis(30)) {
LOGGER.warn("{} - maxLifetime is less than 30000ms, setting to default {}ms.", poolName, MAX_LIFETIME);
maxLifetime = MAX_LIFETIME;
}
//连接允许在池中闲置的最长时间 要小于maxLifetime 池中连接最长生命周期
if (idleTimeout + SECONDS.toMillis(1) > maxLifetime && maxLifetime > 0) {
LOGGER.warn("{} - idleTimeout is close to or more than maxLifetime, disabling it.", po