From b650f8ffa3a338780b40dd1546b862b777d1468b Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 23 Jul 2012 18:45:51 +0800 Subject: [PATCH] add stat DiscardCount --- .../com/alibaba/druid/pool/DruidDataSource.java | 17 +++++++++-------- .../druid/pool/DruidDataSourceMBean.java | 2 ++ .../druid/stat/DruidDataSourceStatManager.java | 5 ++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index a4a4c06566..bd11613fe5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -98,6 +98,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private ConnectionHolder[] connections; private int poolingCount = 0; private int activeCount = 0; + private int discardCount = 0; private int notEmptyWaitThreadCount = 0; private int notEmptyWaitThreadPeak = 0; @@ -132,6 +133,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat this.resetStatEnable = resetStatEnable; } + public int getDiscardCount() { + return discardCount; + } + public void restart() { lock.lock(); try { @@ -153,6 +158,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat try { connectCount = 0; closeCount = 0; + discardCount = 0; connectErrorCount = 0; recycleCount = 0; createConnectionCount = 0; @@ -410,7 +416,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return getConnectionDirect(maxWaitMillis); } } - + @Override public PooledConnection getPooledConnection() throws SQLException { return getConnection(maxWait); @@ -499,14 +505,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private void discardConnection(Connection realConnection) throws SQLException { JdbcUtils.close(realConnection); - try { - lock.lockInterruptibly(); - } catch (InterruptedException e) { - throw new SQLException("interrupt", e); - } - + lock.lock(); try { activeCount--; + discardCount++; } finally { lock.unlock(); } @@ -1421,5 +1423,4 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return x; } - } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java index 9e57b31939..808916e7f5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java @@ -70,4 +70,6 @@ public interface DruidDataSourceMBean extends DruidAbstractDataSourceMBean { ObjectName getObjectName(); void clearStatementCache() throws SQLException; + + int getDiscardCount(); } diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java index 6afea34096..a15f97d958 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java @@ -223,6 +223,7 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe map.put("LastErrorTime", dataSource.getLastErrorTime()); map.put("LastCreateErrorTime", dataSource.getLastCreateErrorTime()); map.put("CreateErrorCount", dataSource.getCreateErrorCount()); + map.put("DiscardCount", dataSource.getDiscardCount()); return new CompositeDataSupport(rowType, map); } @@ -295,6 +296,7 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe // 40 - SimpleType.DATE, // SimpleType.DATE, // + SimpleType.LONG, // SimpleType.LONG // // }; @@ -359,7 +361,8 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe // 40 - , "LastErrorTime", // "LastCreateErrorTime", // - "CreateErrorCount" // + "CreateErrorCount", // + "DiscardCount", // // };