From e2c630a6c6d392b7d8e3d4a93e227ac43609d0cc Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 8 Dec 2011 13:03:54 +0800 Subject: [PATCH] ha-datasource --- .../java/com/alibaba/druid/pool/ha/HADataSource.java | 3 +-- .../com/alibaba/druid/pool/ha/MultiDataSource.java | 10 ++++++++++ .../com/alibaba/druid/bvt/pool/TestConcurrent.java | 2 +- .../alibaba/druid/bvt/pool/ha/HADataSourceTest.java | 4 ++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java index 89ce8e9d25..aacad2924c 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -71,11 +71,10 @@ public class HADataSource extends MultiDataSource implements DataSource { } public void close() { + super.close(); if (LOG.isDebugEnabled()) { LOG.debug("HADataSource closed"); } - - JdbcUtils.close(master); } private class DataSourceList extends AbstractList implements RandomAccess, java.io.Serializable { diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java index 391e751077..8958045d70 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -15,6 +15,7 @@ import com.alibaba.druid.pool.DataSourceAdapter; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.ha.valid.DefaultValidDataSourceChecker; import com.alibaba.druid.pool.ha.valid.ValidDataSourceChecker; +import com.alibaba.druid.util.JdbcUtils; public abstract class MultiDataSource extends DataSourceAdapter { @@ -55,6 +56,15 @@ public abstract class MultiDataSource extends DataSourceAdapter { lock.unlock(); } } + + protected void close() { + scheduler.shutdownNow(); + + Object[] items = this.getDataSources().toArray(); + for (Object item : items) { + JdbcUtils.close((DruidDataSource) item); + } + } protected ScheduledExecutorService getScheduler() { return scheduler; 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 5897a4278d..df034e02a1 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestConcurrent.java @@ -49,7 +49,7 @@ public class TestConcurrent extends TestCase { if (size > 0) { for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { dataSource.close(); - System.out.println("unclosed datasource : " + dataSource.getObjectName()); + System.out.println("unclosed datasource : " + dataSource.getObjectName() + ", url : " + dataSource.getUrl()); } Assert.fail("size : " + size); } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest.java index 2ee245c187..bd227ba202 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ha/HADataSourceTest.java @@ -24,11 +24,11 @@ public class HADataSourceTest extends TestCase { Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); dataSourceA = new DruidDataSource(); - dataSourceA.setUrl("jdbc:mock:x1"); + dataSourceA.setUrl("jdbc:mock:ha1"); dataSourceA.setFilters("trace"); dataSourceB = new DruidDataSource(); - dataSourceB.setUrl("jdbc:mock:x1"); + dataSourceB.setUrl("jdbc:mock:ha2"); dataSourceB.setFilters("stat"); dataSourceHA = new HADataSource();