有关于Druid的removeAbandoned机制,在getConnection源码中介绍过。removeAbandoned实际上就是Druid的泄露检测机制。主要的参数有:
参数 | 说明 |
---|---|
removeAbandoned | 如果连接泄露,是否需要回收泄露的连接,默认false; |
logAbandoned | 如果回收了泄露的连接,是否要打印一条log,默认false; |
removeAbandonedTimeoutMillis | 连接回收的超时时间,默认5分钟; |
removeAbandoned作为开启连接泄露检测机制的开关,默认为false,当为true的时候,在随着DestroyTask的调用频率定期检测。
在DestroyTask的run方法中:
@Override
public void run() {
shrink(true, keepAlive);
if (isRemoveAbandoned()) {
removeAbandoned();
}
}
当开启连接泄露检测机制之后,会定期检测连接是否触发超时时间,如果触发则关闭连接。凡是get之后被使用的连接都放置在activeConnections中。
之后遍历activeConnections,对连接进行判断,如果触发超时时间