首先我想说的是,翻遍百度没有一个可用的解决方案,呵呵..我相信实际解决的人不在少数...
大家众所周知,mysql和druid可谓数据库和数据库连接池中的佼佼者...
第一次用mysql用的还是比较头疼的...
尤其是同时碰上druid...简直是要命了..
换过好几次druid版本,完全没有解决...
github上看wenshao说的,maxEvictableIdleTimeMillis用于解决mysql8小时自动中断,从源码看是有效的.
通过源码,总结一下会出现mysql8小时空闲后中断连接可能出现的情况
1.timeBetweenEvictionRunsMillis+minEvictableIdleTimeMillis>8小时
2.minIdle>0,导致druid会至少保留一个连接,使用1.0.18版本及以上版本不会存在该问题,如果你修改了mysql的wait_timeout,那么可以配置maxEvictableIdleTimeMillis判断可空闲最大时间,即使当前线程数等于minIdle也会强制回收,当然这个回收流程需要timeBetweenEvictionRunsMillis间隔时间后才会检测.
如果是其余问题,请查看druid监控页面是否有sql运行导致锁表
而我遇到的连接池挂掉正是mysql锁表导致的,有个sql锁了系统核心的那张表,所以什么操作都无法进行了
回到正题,看看druid如何执行的回收
druid回收的线程
public class DestroyTask implements Runnable {
@Override
public void run() {
shrink(true);
if (isRemoveAbandoned()) {
removeAbandoned()