彻底解决jdbc数据库连接超时重试-communication link failure的正确姿势

本文详细介绍了如何在Druid 1.2.6及以上版本中配置jdbc连接以解决数据库连接超时问题。通过设置特定的连接参数,包括autoReconnect、minIdle、maxIdle等,确保在连接被数据库主动断开后能够自动重连。同时,文章还强调了错误配置可能导致的问题,并提供了包含自动重连三层境界的完整解决方案,包括设置验证查询、保活时间和数据库超时时间的匹配等。
摘要由CSDN通过智能技术生成

必须确保你的druid jdbc版本为1.2.6

这个问题只有在druid 1.2.6里解决,因为只要是低于druid 1.2.6版本,本身就存在bug,无论你怎么设都会打断连接。

背景

我们经常会在日志中看到“jdbc connection timeout, last connection was 11,080 ms这样的错误。

这个代表MYSQL主动把你的jdbc连接给踢掉了。

为什么MYSQL要踢掉connection?

这个很正常,那是因为:MYSQL不可能无限接在接受一个数据库连接请求后就一直给你KEEP在那边的。生产环境都是这么一个“梗”,试想一个connection里的一个sql的迪卡尔积有10mb,2000个边接keep在那8小时不关闭,这个mysql会被随时打爆。

在2001年古老的oracle 7g、8i时代,就已经有一个参数叫timeout,根据oracle创始人Larry Ellison和“杀死比尔”-哦,错了,是比尔.盖茨对这个参数解释是:1分钟。即数据库keep住你的一个连接1分钟,这1分钟内如果没有任何的重复连接那么该连接会被数据库踢掉。

这就是生产数据库的“自我保护”机

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TGITCIC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值