From eb70a31106a14435bd7b043599ceeea8d81c1b6a Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 9 Oct 2011 07:14:53 +0000 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@932 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/DruidAbstractDataSource.java | 19 ++++++++++++++++--- .../pool/DruidAbstractDataSourceMBean.java | 2 ++ .../alibaba/druid/pool/DruidDataSource.java | 3 ++- .../druid/pool/PreparedStatementPool.java | 4 ++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 06b6c3bf50..1260de47d3 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -183,6 +183,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements protected final AtomicLong reusePreparedStatement = new AtomicLong(); protected final AtomicLong preparedStatementCount = new AtomicLong(); protected final AtomicLong closedPreparedStatementCount = new AtomicLong(); + protected final AtomicLong cachedPreparedStatementCount = new AtomicLong(); protected final Histogram transactionHistogram = new Histogram( 10, @@ -195,10 +196,22 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements return transactionHistogram; } + public void incrementCachedPreparedStatementCount() { + cachedPreparedStatementCount.incrementAndGet(); + } + + public void decrementCachedPreparedStatementCount() { + cachedPreparedStatementCount.decrementAndGet(); + } + + public long getCachedPreparedStatementCount() { + return cachedPreparedStatementCount.get(); + } + public void incrementClosedPreparedStatementCount() { closedPreparedStatementCount.incrementAndGet(); } - + public long getClosedPreparedStatementCount() { return closedPreparedStatementCount.get(); } @@ -1327,13 +1340,13 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements public Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new SQLFeatureNotSupportedException(); } - + public void closePreapredStatement(PreparedStatementHolder stmtHolder) { if (stmtHolder == null) { return; } closedPreparedStatementCount.incrementAndGet(); - + JdbcUtils.close(stmtHolder.getStatement()); } } diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java index eded92ecbe..488bd4bf3f 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java @@ -125,4 +125,6 @@ public interface DruidAbstractDataSourceMBean { long getPreparedStatementCount(); long getClosedPreparedStatementCount(); + + long getCachedPreparedStatementCount(); } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index d5c2876255..714d6d9302 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -174,6 +174,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat for (PreparedStatementHolder holder : connection.getStatementPool().getMap().values()) { closePreapredStatement(holder); + decrementCachedPreparedStatementCount(); } connection.getStatementPool().getMap().clear(); @@ -1217,6 +1218,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat @Override public String getVersion() { - return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion + "-2011-10-09 11:42"; + return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion + "-2011-10-09 14:58"; } } diff --git a/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java b/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java index 8f806ec1ef..36106f5383 100644 --- a/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java +++ b/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java @@ -47,6 +47,7 @@ public class PreparedStatementPool { if (holder != null) { holder.incrementReusedCount(); + dataSource.decrementCachedPreparedStatementCount(); } return holder; @@ -57,6 +58,8 @@ public class PreparedStatementPool { PreparedStatementHolder oldHolder = map.put(key, holder); if (oldHolder != null) { dataSource.closePreapredStatement(oldHolder); + } else { + dataSource.incrementCachedPreparedStatementCount(); } } @@ -77,6 +80,7 @@ public class PreparedStatementPool { if (remove) { dataSource.closePreapredStatement(eldest.getValue()); + dataSource.decrementCachedPreparedStatementCount(); } return remove;