From 87ab582fdbfbd47186770a353d9b70546c1bd541 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 19 Dec 2011 14:29:06 +0800 Subject: [PATCH] ha support --- .../com/alibaba/druid/pool/DruidDataSource.java | 5 +++++ .../alibaba/druid/pool/ha/DataSourceHolder.java | 6 +++++- .../com/alibaba/druid/pool/ha/HADataSource.java | 4 ++-- .../com/alibaba/druid/pool/ha/MultiDataSource.java | 14 ++++++++++++++ .../druid/pool/ha/MultiDataSourceMBean.java | 4 ++++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index f84d99b8f2..fe1597a309 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -122,6 +122,11 @@ public class DruidDataSource extends DruidAbstractDataSource implements public void setResetStatEnable(boolean resetStatEnable) { this.resetStatEnable = resetStatEnable; } + + public void restart() { + this.close(); + this.inited = false; + } public void resetStat() { if (!resetStatEnable) { diff --git a/src/main/java/com/alibaba/druid/pool/ha/DataSourceHolder.java b/src/main/java/com/alibaba/druid/pool/ha/DataSourceHolder.java index a289f03a87..dd3a1c8790 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/DataSourceHolder.java +++ b/src/main/java/com/alibaba/druid/pool/ha/DataSourceHolder.java @@ -21,7 +21,7 @@ public class DataSourceHolder implements Closeable { this.dataSource = dataSource; } - public void resetStat() { + public void resetState() { connectCount.set(0); } @@ -66,4 +66,8 @@ public class DataSourceHolder implements Closeable { public void close() { dataSource.close(); } + + public void restart() { + dataSource.resetStat(); + } } 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 7ef9d7f3f7..775b8d3e05 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -25,8 +25,8 @@ public class HADataSource extends MultiDataSource implements HADataSourceMBean, public void resetStat() { super.resetStat(); - master.resetStat(); - slave.resetStat(); + master.resetState(); + slave.resetState(); } public long getMasterConnectCount() { 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 7cc049ae16..2091185ae0 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -181,6 +181,10 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi public void handleNotAwailableDatasource(DataSourceHolder dataSourceHolder) { dataSourceHolder.setEnable(false); } + + public String[] getDataSourceNames() { + return this.dataSources.keySet().toArray(new String[this.dataSources.size()]); + } @Override public String getDbType() { @@ -216,6 +220,16 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi public long createTransactionId() { return transactionIdSeed.incrementAndGet(); } + + public boolean restartDataSource(String name) { + DataSourceHolder holder = this.getDataSources().get(name); + if (holder != null) { + holder.restart(); + return true; + } + + return false; + } class FailureDetectTask implements Runnable { diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java index ba950b154d..4a8c51f642 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java @@ -3,4 +3,8 @@ package com.alibaba.druid.pool.ha; public interface MultiDataSourceMBean { void failureDetect(); + + String[] getDataSourceNames(); + + boolean restartDataSource(String name); }