个人原创,拒绝转载
数据源连接池配置如下
dataSource.setDriverClassName(driver);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setUrl(url);
dataSource.setInitialSize(1);
dataSource.setMinIdle(3);
dataSource.setMaxActive(20);
dataSource.setLoginTimeout(50);
dataSource.setKeepAlive(true);
dataSource.setBreakAfterAcquireFailure(true);
dataSource.setConnectionErrorRetryAttempts(5);
dataSource.setMaxWait(80000);
dataSource.setMinEvictableIdleTimeMillis(60000);
dataSource.setTestWhileIdle(true);
if (driver.toLowerCase().contains("oracle")) {
dataSource.setValidationQuery("SELECT 1 FROM dual");
} else {
dataSource.setValidationQuery("SELECT 1");
}
dataSource.setTimeBetweenEvictionRunsMillis(60000);
dataSource.setTestOnBorrow(false);
// dataSource.setTestOnReturn(false);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
dataSource.setRemoveAbandoned(true);
dataSource.setLogAbandoned(true);
理论上来讲,最大的连接数上限就是20了。但实际并不是
从oracle端查看连接数
可以确认,确实超过了druid的连接池上限。
从网上看来的druid连接池的流程图
大致看完之后开始debug
意外的发现,DestroyTask的逻辑似乎有点问题。