diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index c4086f5c09..51b4d0c428 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -261,7 +261,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat LOG.debug("skip not validate connection."); } - poolalbeConnection.close(false); + Connection realConnection = poolalbeConnection.getConnection(); + JdbcUtils.close(realConnection); continue; } } else { @@ -272,6 +273,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } } + if (isRemoveAbandoned()) { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + activeConnections.put(poolalbeConnection, new ActiveConnectionTraceInfo(poolalbeConnection, System.currentTimeMillis(), stackTrace)); + } + return poolalbeConnection; } } @@ -311,11 +317,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat activeCount++; poolalbeConnection = new PoolableConnection(holder); - - if (isRemoveAbandoned()) { - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - activeConnections.put(poolalbeConnection, new ActiveConnectionTraceInfo(poolalbeConnection, System.currentTimeMillis(), stackTrace)); - } } catch (InterruptedException e) { connectErrorCount++; throw new SQLException(e.getMessage(), e); diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index 45e0688fc9..fdfd711c73 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -43,7 +43,6 @@ import com.alibaba.druid.logging.Log; import com.alibaba.druid.logging.LogFactory; import com.alibaba.druid.pool.PoolablePreparedStatement.PreparedStatementKey; import com.alibaba.druid.pool.PreparedStatementPool.MethodType; -import com.alibaba.druid.util.JdbcUtils; /** * @author wenshao @@ -124,10 +123,6 @@ public class PoolableConnection implements PooledConnection, Connection { @Override public void close() throws SQLException { - close(true); - } - - public void close(boolean recyle) throws SQLException { if (holder == null) { LOG.warn("dup close"); return; @@ -152,11 +147,8 @@ public class PoolableConnection implements PooledConnection, Connection { } holder.reset(); - if (recyle) { - holder.getDataSource().recycle(this); - } else { - JdbcUtils.close(holder.getConnection()); - } + holder.getDataSource().recycle(this); + holder = null; conn = null; } diff --git a/src/test/java/com/alibaba/druid/pool/dbcp/TestIdle.java b/src/test/java/com/alibaba/druid/pool/dbcp/TestIdle.java index 67ee3a83c3..5ead41ed25 100644 --- a/src/test/java/com/alibaba/druid/pool/dbcp/TestIdle.java +++ b/src/test/java/com/alibaba/druid/pool/dbcp/TestIdle.java @@ -17,8 +17,8 @@ public class TestIdle extends TestCase { public void test_idle() throws Exception { MockDriver driver = MockDriver.instance; -// BasicDataSource dataSource = new BasicDataSource(); - DruidDataSource dataSource = new DruidDataSource(); + BasicDataSource dataSource = new BasicDataSource(); +// DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setDriverClassName("com.alibaba.druid.mock.MockDriver"); dataSource.setInitialSize(1);