From dc7d7062b0acbd8e83e24b38c4ed85042844a83d Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 17 Aug 2012 08:22:19 +0800 Subject: [PATCH] support dynamic config --- .../druid/pool/DruidAbstractDataSource.java | 20 +++++++++++--- .../alibaba/druid/pool/DruidDataSource.java | 8 +++--- .../com/alibaba/druid/bvt/pool/ParamTest.java | 25 +++++++++++------- .../druid/bvt/pool/basic/DataSourceTest3.java | 26 +++---------------- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 12c62b2297..119d30ca86 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -784,8 +784,12 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements } public void setMaxWait(long maxWaitMillis) { + if (maxWaitMillis == this.maxWait) { + return; + } + if (inited) { - throw new UnsupportedOperationException(); + LOG.error("maxWait modified : " + this.maxWait + " -> " + maxWaitMillis); } this.maxWait = maxWaitMillis; @@ -795,12 +799,20 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements return minIdle; } - public void setMinIdle(int minIdle) { + public void setMinIdle(int value) { + if (value == this.minIdle) { + return; + } + if (inited) { - throw new UnsupportedOperationException(); + if (value > this.maxActive) { + throw new IllegalArgumentException("minIdle greater than maxActive, " + maxActive + " < " + this.minIdle); + } + + LOG.error("minIdle modified : " + this.minIdle + " -> " + value); } - this.minIdle = minIdle; + this.minIdle = value; } public int getMaxIdle() { diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index b752155e6c..d401313bc8 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -253,10 +253,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return; } - if (maxActive < this.minIdle) { - throw new IllegalArgumentException("maxActive less than minIdle, " + maxActive + " < " + this.minIdle); - } - if (maxActive == 0) { throw new IllegalArgumentException("maxActive can't not set zero"); } @@ -265,6 +261,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat this.maxActive = maxActive; return; } + + if (maxActive < this.minIdle) { + throw new IllegalArgumentException("maxActive less than minIdle, " + maxActive + " < " + this.minIdle); + } if (LOG.isInfoEnabled()) { LOG.info("maxActive modified : " + this.maxActive + " -> " + maxActive); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java index a2e059f875..514d7de5a3 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java @@ -31,7 +31,7 @@ public class ParamTest extends TestCase { JdbcStatManager.getInstance().reset(); dataSource.init(); - JdbcDataSourceStat stat =dataSource.getDataSourceStat(); + JdbcDataSourceStat stat = dataSource.getDataSourceStat(); Assert.assertEquals(0, stat.getConnectionStat().getConnectCount()); Assert.assertEquals(1, dataSource.getProxyFilters().size()); @@ -51,7 +51,7 @@ public class ParamTest extends TestCase { dataSource.close(); -// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); + // Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); Assert.assertEquals(1, stat.getConnectionStat().getConnectCount()); Assert.assertEquals(1, stat.getConnectionStat().getCloseCount()); @@ -66,22 +66,29 @@ public class ParamTest extends TestCase { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:"); dataSource.setInitialSize(0); - dataSource.setMaxActive(0); dataSource.setMinIdle(0); dataSource.setMaxIdle(0); + Exception error = null; + try { + dataSource.setMaxActive(0); + } catch (Exception e) { + error = e; + } + Assert.assertNotNull(error); + Assert.assertEquals(0, dataSource.getProxyFilters().size()); dataSource.setFilters("stat"); JdbcStatManager.getInstance().reset(); -// Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); -// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); + // Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + // Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); Assert.assertEquals(1, dataSource.getProxyFilters().size()); - Exception error = null; + error = null; try { dataSource.getConnection(); } catch (Exception ex) { @@ -104,10 +111,10 @@ public class ParamTest extends TestCase { Assert.assertEquals(1, dataSource.getProxyFilters().size()); JdbcStatManager.getInstance().reset(); - + dataSource.init(); - JdbcDataSourceStat stat =dataSource.getDataSourceStat(); - + JdbcDataSourceStat stat = dataSource.getDataSourceStat(); + Assert.assertEquals(10, stat.getConnectionStat().getConnectCount()); for (int i = 0; i < 10; ++i) { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java b/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java index 44ad4cfa45..aa758d86b7 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/basic/DataSourceTest3.java @@ -79,36 +79,18 @@ public class DataSourceTest3 extends TestCase { dataSource.setPoolPreparedStatements(false); } - public void test_error_2() throws Exception { + public void test_change_maxWait() throws Exception { DruidPooledConnection conn = dataSource.getConnection().unwrap(DruidPooledConnection.class); - conn.close(); - - { - Exception error = null; - try { - dataSource.setMaxWait(1); - } catch (Exception ex) { - error = ex; - } - Assert.assertNotNull(error); - } + dataSource.setMaxWait(1); } - public void test_error_3() throws Exception { + public void test_change_minIdle() throws Exception { DruidPooledConnection conn = dataSource.getConnection().unwrap(DruidPooledConnection.class); conn.close(); - { - Exception error = null; - try { - dataSource.setMinIdle(1); - } catch (Exception ex) { - error = ex; - } - Assert.assertNotNull(error); - } + dataSource.setMinIdle(1); } public void test_error_4() throws Exception {