必须确保你的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分钟内如果没有任何的重复连接那么该连接会被数据库踢掉。
这就是生产数据库的“自我保护”机