diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index e86c751d27..ebeb9535cc 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -771,6 +771,20 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat if (timeMillis >= removeAbandonedTimeoutMillis) { PoolableConnection pooledConnection = entry.getKey(); JdbcUtils.close(pooledConnection); + + if (isLogAbandoned()) { + StringBuilder buf = new StringBuilder(); + buf.append("abondon connection, open stackTrace\n"); + + StackTraceElement[] trace = activeInfo.getStackTrace(); + for (int i = 0; i < trace.length; i++) { + buf.append("\tat "); + buf.append(trace[i].toString()); + buf.append("\n"); + } + + LOG.warn(buf.toString()); + } } } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestAbondon.java b/src/test/java/com/alibaba/druid/bvt/pool/TestAbondon.java index 9dedf3d326..103abd9b2c 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestAbondon.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestAbondon.java @@ -16,6 +16,7 @@ public class TestAbondon extends TestCase { dataSource = new DruidDataSource(); dataSource.setRemoveAbandoned(true); dataSource.setRemoveAbandonedTimeoutMillis(10); + dataSource.setLogAbandoned(true); dataSource.setTimeBetweenEvictionRunsMillis(1); dataSource.setUrl("jdbc:mock:xxx");