From 0e057c6fca2505e965519f1e8186743e7a4b5705 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 20 Aug 2012 13:17:53 +0800 Subject: [PATCH] fixed bug & testcase --- .../alibaba/druid/filter/stat/StatFilter.java | 12 ++++--- .../druid/pool/DruidDataSourceFactory.java | 5 +++ .../stat/DruidDataSourceStatManager.java | 31 ++++++++++++++----- .../druid/bvt/pool/TestActiveTrace.java | 2 +- .../druid/bvt/pool/TestConcurrent.java | 2 +- .../druid/bvt/pool/TestConnectTimeout.java | 2 +- 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 71694e6725..06c4eebc29 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -54,8 +54,12 @@ import com.alibaba.druid.support.logging.LogFactory; * @author wenshao */ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { - private final static Log LOG = LogFactory.getLog(StatFilter.class); + + private static final String SYS_PROP_LOG_SLOW_SQL = "druid.stat.logSlowSql"; + private static final String SYS_PROP_SLOW_SQL_MILLIS = "druid.stat.slowSqlMillis"; + private static final String SYS_PROP_MERGE_SQL = "druid.stat.mergeSql"; + public final static String ATTR_NAME_CONNECTION_STAT = "stat.conn"; public final static String ATTR_NAME_STATEMENT_STAT = "stat.stmt"; public final static String ATTR_UPDATE_COUNT = "stat.updteCount"; @@ -153,7 +157,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { } { - String property = properties.getProperty("druid.stat.mergeSql"); + String property = properties.getProperty(SYS_PROP_MERGE_SQL); if ("true".equals(property)) { this.mergeSql = true; } else if ("false".equals(property)) { @@ -162,7 +166,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { } { - String property = properties.getProperty("druid.stat.slowSqlMillis"); + String property = properties.getProperty(SYS_PROP_SLOW_SQL_MILLIS); if (property != null && property.trim().length() > 0) { property = property.trim(); try { @@ -174,7 +178,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { } { - String property = properties.getProperty("druid.stat.logSlowSql"); + String property = properties.getProperty(SYS_PROP_LOG_SLOW_SQL); if ("true".equals(property)) { this.logSlowSql = true; } else if ("false".equals(property)) { diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java index daa9139d6f..ec450c8080 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java @@ -106,6 +106,11 @@ public class DruidDataSourceFactory implements ObjectFactory { return createDataSource(properties); } + + @SuppressWarnings("rawtypes") + public static DataSource createDataSource(Properties properties) throws Exception { + return createDataSource((Map) properties); + } @SuppressWarnings("rawtypes") public static DataSource createDataSource(Map properties) throws Exception { diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java index 9cc649ca12..a418297023 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java @@ -43,18 +43,19 @@ import com.alibaba.druid.util.JMXUtils; @SuppressWarnings("rawtypes") public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBean { - public final static String SYS_PROP_INSTANCES = "druid.dataSources"; + public final static String SYS_PROP_INSTANCES = "druid.dataSources"; + public final static String SYS_PROP_REGISTER_SYS_PROPERTY = "druid.registerToSysProperty"; - private final static Log LOG = LogFactory.getLog(DruidDataSourceStatManager.class); + private final static Log LOG = LogFactory.getLog(DruidDataSourceStatManager.class); - private final static DruidDataSourceStatManager instance = new DruidDataSourceStatManager(); + private final static DruidDataSourceStatManager instance = new DruidDataSourceStatManager(); - private final AtomicLong resetCount = new AtomicLong(); + private final AtomicLong resetCount = new AtomicLong(); // global instances - private static IdentityHashMap dataSources; + private static volatile IdentityHashMap dataSources; - private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDataSourceStat"; + private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDataSourceStat"; public static DruidDataSourceStatManager getInstance() { return instance; @@ -84,14 +85,28 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe } @SuppressWarnings("unchecked") - public static IdentityHashMap getInstances() { + public synchronized static IdentityHashMap getInstances() { if (dataSources == null) { - dataSources = getInstances0(); + if (isRegisterToSystemProperty()) { + dataSources = getInstances0(); + } else { + dataSources = new IdentityHashMap(); + } } return dataSources; } + public static boolean isRegisterToSystemProperty() { + String value = System.getProperty(SYS_PROP_REGISTER_SYS_PROPERTY); + + if ("false".equals(value)) { + return false; + } + + return true; + } + @SuppressWarnings("unchecked") static IdentityHashMap getInstances0() { Properties properties = System.getProperties(); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java b/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java index 5fdd3cf575..8d8c379ccf 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestActiveTrace.java @@ -18,7 +18,7 @@ public class TestActiveTrace extends TestCase { dataSource = new DruidDataSource(); dataSource.setRemoveAbandoned(true); - dataSource.setRemoveAbandonedTimeoutMillis(10); + dataSource.setRemoveAbandonedTimeoutMillis(100); dataSource.setLogAbandoned(true); dataSource.setTimeBetweenEvictionRunsMillis(10); dataSource.setMinEvictableIdleTimeMillis(300 * 1000); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java b/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java index 9d671bb55d..d13143a3a3 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java @@ -183,7 +183,7 @@ public class TestConcurrent extends TestCase { dataSource.shrink(); Assert.assertEquals(0, dataSource.getActiveCount()); - Assert.assertEquals(dataSource.getMinIdle(), dataSource.getPoolingCount()); + Assert.assertEquals("minIdle != poolingCount", dataSource.getMinIdle(), dataSource.getPoolingCount()); System.out.println(threadCount + "-threads start"); startLatch.countDown(); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestConnectTimeout.java b/src/test/java/com/alibaba/druid/bvt/pool/TestConnectTimeout.java index b2255b6fd6..30112a7271 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestConnectTimeout.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestConnectTimeout.java @@ -25,7 +25,7 @@ public class TestConnectTimeout extends TestCase { dataSource.setFilters("stat"); dataSource.setMaxOpenPreparedStatements(30); dataSource.setMaxActive(4); - dataSource.setMaxWait(100); + dataSource.setMaxWait(1000); dataSource.setMinIdle(0); dataSource.setInitialSize(1); dataSource.init();