diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 076c677ba8..b81dd36c8c 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -694,7 +694,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat initedLatch.countDown(); final List evictList = new ArrayList(); - final List idleList = new ArrayList(); FOR_0: for (;;) { // 从前面开始删除 try { @@ -727,24 +726,23 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat break; } - if (idleList.size() >= numTestsPerEvictionRun) { - break; - } ConnectionHolder connection = connections[i]; if (evictCount == 0 && idleCount == 0 && connection == null) { continue FOR_0; } + + if (count - evictList.size() <= minIdle) { + break; + } long idleMillis = System.currentTimeMillis() - connection.getLastActiveTimeMillis(); - if (idleMillis >= minEvictableIdleTimeMillis && count - evictList.size() > minIdle) { + if (idleMillis >= minEvictableIdleTimeMillis) { evictList.add(connection); - } else { - idleList.add(connection); } } - int removeCount = idleList.size() + evictList.size(); + int removeCount = evictList.size(); System.arraycopy(connections, removeCount, connections, 0, count - removeCount); Arrays.fill(connections, count - removeCount, count, null); count -= removeCount; @@ -752,13 +750,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat lock.unlock(); } - for (ConnectionHolder idleConnection : idleList) { - if (!testConnectionInternal(idleConnection.getConnection())) { - evictList.add(idleConnection); - } - } - - for (ConnectionHolder item : evictList) { Connection connection = item.getConnection(); JdbcUtils.close(connection); @@ -782,7 +773,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } - idleList.clear(); evictList.clear(); } catch (InterruptedException e) { break; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java index fcccda62fb..fc7696070e 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle.java @@ -59,7 +59,7 @@ public class TestIdle extends TestCase { Thread.sleep(dataSource.getMinEvictableIdleTimeMillis() * 2); Assert.assertEquals(0, driver.getConnections().size()); - Assert.assertEquals(0, dataSource.getPoolingCount()); + Assert.assertEquals(1, dataSource.getPoolingCount()); { Connection conn = dataSource.getConnection(); Assert.assertEquals(dataSource.getMinIdle(), driver.getConnections().size());