druid数据库连接池
druid----》DataSource 类的Close方法
///中断线程,关闭任务
logStatsThread
createConnectionThread
destroyConnectionThread
createSchedulerFuture
destroySchedulerFuture
//关闭物理连接
for(int i = 0; i < this.poolingCount; ++i) {
DruidConnectionHolder connHolder = this.connections[i];
Iterator var3 = connHolder.getStatementPool().getMap().values().iterator();
while(var3.hasNext()) {
PreparedStatementHolder stmtHolder = (PreparedStatementHolder)var3.next();
connHolder.getStatementPool().closeRemovedStatement(stmtHolder);
}
connHolder.getStatementPool().getMap().clear();
Connection physicalConnection = connHolder.getConnection();
try {
physicalConnection.close();
} catch (Exception var8) {
LOG.warn("close connection error", var8);
}
this.connections[i] = null;
destroyCountUpdater.incrementAndGet(this);
}
//摧毁拦截器
List<Filter> filters
durid配置连接回收机制(只会关闭 DruidPooledConnection 连接,DataSource会创建一个物理连接)
//超过时间限制是否回收
dataSource.setRemoveAbandoned(true);
//设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此
dataSource.setRemoveAbandonedTimeoutMillis(6000);
//当druid强制回收连接后,是否将stack trace 记录到日志中
dataSource.setLogAbandoned(false);