彻底解决jdbc数据库连接超时重试 |
您所在的位置:网站首页 › java连接网络 › 彻底解决jdbc数据库连接超时重试 |
必须确保你的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分钟内如果没有任何的重复连接那么该连接会被数据库踢掉。 这就是生产数据库的“自我保护”机制,这是必须的。这也是为什么我强调大家你的“线上SQL单条执行必须 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |