diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 5ccda76bb7..9c1f1bd187 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -172,24 +172,33 @@ public abstract class DruidAbstractDataSource implements DruidAbstractDataSource protected boolean breakAfterAcquireFailure = false; protected final AtomicLong commitCount = new AtomicLong(); + protected final AtomicLong startTransactionCount = new AtomicLong(); protected final AtomicLong rollbackCount = new AtomicLong(); public long getCommitCount() { return commitCount.get(); } - + public void incrementCommitCount() { commitCount.incrementAndGet(); } - + public long getRollbackCount() { return rollbackCount.get(); } - + public void incrementRollbackCount() { rollbackCount.incrementAndGet(); } + public long getStartTransactionCount() { + return startTransactionCount.get(); + } + + public void incrementStartTransactionCount() { + startTransactionCount.incrementAndGet(); + } + public boolean isBreakAfterAcquireFailure() { return breakAfterAcquireFailure; } diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java index 81b2c8b094..6fe855a117 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSourceMBean.java @@ -39,6 +39,8 @@ public interface DruidAbstractDataSourceMBean { long getCommitCount(); long getRollbackCount(); + + long getStartTransactionCount(); int getQueryTimeout(); diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 0c299c19b6..4763c99daf 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -127,6 +127,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } finally { lock.unlock(); } + + commitCount.set(0); + rollbackCount.set(0); + startTransactionCount.set(0); } public boolean isEnable() { diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index d6c3ecdd05..17aeaa9900 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -528,6 +528,10 @@ public class PoolableConnection implements PooledConnection, Connection { checkOpen(); try { + if ((!autoCommit) && conn.getAutoCommit()) { + holder.getDataSource().incrementStartTransactionCount(); + } + conn.setAutoCommit(autoCommit); } catch (SQLException ex) { handleException(ex);