From 575b647a2686dff835d0745def67a98ad7bec72b Mon Sep 17 00:00:00 2001 From: lijian Date: Wed, 17 Jun 2015 10:18:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?removeAbandoned=20log=E5=A2=9E=E5=8A=A0=20o?= =?UTF-8?q?wnerThread=E5=92=8C=E5=AE=83=E5=BD=93=E5=89=8D=E7=9A=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=92=8C=E5=A0=86=E6=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 58 +++++++++++++------ .../alibaba/druid/pool/DruidDataSource.java | 12 ++++ .../druid/pool/DruidPooledConnection.java | 8 +++ .../com/alibaba/druid/pool/MaxWaitTest.java | 1 - 4 files changed, 60 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 42227a9377..c74b60b2bd 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,15 @@ file://${basedir}/lib/ default + + oschina + oschina Repository + default + http://maven.oschina.net/content/repositories/public + + true + + + + + + + + + cn.guoyukun.jdbc + oracle-ojdbc6 + 11.2.0.3.0 + org.quartz-scheduler @@ -518,14 +527,14 @@ test - proxool + com.cloudhopper.proxool proxool 0.9.1 test - proxool - proxool-cglib + com.cloudhopper.proxool + proxool-cglib 0.9.1 test @@ -575,8 +584,7 @@ com.taobao.tbdatasource tbdatasource - 2.0.2 - test + 3.0.1.5.taobaocode jboss @@ -610,4 +618,18 @@ test + + + + releases + gozap构件发布版仓库 + http://repo.gozap.com/repos/content/repositories/gozap/ + + + snapshots + gozap构件快照版仓库 + http://repo.gozap.com/repos/content/repositories/snapshots + + + diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 8a73839301..82d259b0e5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -20,8 +20,10 @@ import static com.alibaba.druid.util.Utils.getBoolean; import java.io.Closeable; import java.security.AccessController; import java.security.PrivilegedAction; +import java.security.Timestamp; import java.sql.Connection; import java.sql.SQLException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.ConcurrentModificationException; @@ -1013,6 +1015,7 @@ public class DruidDataSource extends DruidAbstractDataSource if (isRemoveAbandoned()) { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); poolableConnection.setConnectStackTrace(stackTrace); + poolableConnection.setConnectedTime(); poolableConnection.setConnectedTimeNano(); poolableConnection.setTraceEnable(true); @@ -1995,6 +1998,7 @@ public class DruidDataSource extends DruidAbstractDataSource } if (abandonedList.size() > 0) { + SimpleDateFormat connectedTimeFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); for (DruidPooledConnection pooledConnection : abandonedList) { synchronized (pooledConnection) { if (pooledConnection.isDisable()) { @@ -2010,6 +2014,7 @@ public class DruidDataSource extends DruidAbstractDataSource if (isLogAbandoned()) { StringBuilder buf = new StringBuilder(); buf.append("abandon connection, open stackTrace\n"); + buf.append("ownerThread " + pooledConnection.getOwnerThread() + " getConnect at " + connectedTimeFormate.format(new Date(pooledConnection.getConnectedTime())) + "\n"); StackTraceElement[] trace = pooledConnection.getConnectStackTrace(); for (int i = 0; i < trace.length; i++) { @@ -2017,6 +2022,13 @@ public class DruidDataSource extends DruidAbstractDataSource buf.append(trace[i].toString()); buf.append("\n"); } + buf.append("ownerThread current state is "+pooledConnection.getOwnerThread().getState() + ", current stackTrace\n"); + trace = pooledConnection.getOwnerThread().getStackTrace(); + for (int i = 0; i < trace.length; i++) { + buf.append("\tat "); + buf.append(trace[i].toString()); + buf.append("\n"); + } LOG.error(buf.toString()); } diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java index e743dced52..bf66877973 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledConnection.java @@ -66,6 +66,7 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. private boolean closed = false; private final Thread ownerThread; + private long connectedTime = 0; private long connectedTimeNano; private volatile boolean running = false; @@ -84,6 +85,13 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql. ownerThread = Thread.currentThread(); } + public void setConnectedTime(){ + this.connectedTime = System.currentTimeMillis(); + } + public long getConnectedTime() { + return connectedTime; + } + public Thread getOwnerThread() { return ownerThread; } diff --git a/src/test/java/com/alibaba/druid/pool/MaxWaitTest.java b/src/test/java/com/alibaba/druid/pool/MaxWaitTest.java index f18988e1a2..f74521ef54 100644 --- a/src/test/java/com/alibaba/druid/pool/MaxWaitTest.java +++ b/src/test/java/com/alibaba/druid/pool/MaxWaitTest.java @@ -19,7 +19,6 @@ import java.sql.Connection; import java.sql.Statement; import java.util.concurrent.CountDownLatch; -import EDU.oswego.cs.dl.util.concurrent.CountDown; import junit.framework.TestCase; public class MaxWaitTest extends TestCase { From 888bdb059f151c185832c5eae667723dfc26a81c Mon Sep 17 00:00:00 2001 From: lijian Date: Wed, 17 Jun 2015 10:30:43 +0800 Subject: [PATCH 2/2] remove oschina repo form pom.xml --- pom.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pom.xml b/pom.xml index c74b60b2bd..f97e902434 100644 --- a/pom.xml +++ b/pom.xml @@ -36,15 +36,6 @@ file://${basedir}/lib/ default - - oschina - oschina Repository - default - http://maven.oschina.net/content/repositories/public - - true - -