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 711307d751..56bbf20224 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -135,11 +135,7 @@ public class HADataSource extends MultiDataSource implements HADataSourceMBean, return conn; } - - public void handleNotAwailableDatasource(DruidDataSource dataSource) { - throw new UnsupportedOperationException(); - } - + public void close() { super.close(); if (LOG.isDebugEnabled()) { 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 ea7cff5db6..7e91ea6952 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -21,8 +21,8 @@ import javax.management.ObjectName; import com.alibaba.druid.filter.Filter; 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.pool.ha.valid.DefaultDataSourceFailureDetecter; +import com.alibaba.druid.pool.ha.valid.DataSourceFailureDetecter; import com.alibaba.druid.proxy.jdbc.DataSourceProxy; import com.alibaba.druid.util.JdbcUtils; @@ -33,9 +33,9 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi private final AtomicLong connectionIdSeed = new AtomicLong(); private final AtomicLong statementIdSeed = new AtomicLong(); private final AtomicLong resultSetIdSeed = new AtomicLong(); - private final AtomicLong transactionIdSeed = new AtomicLong(); + private final AtomicLong transactionIdSeed = new AtomicLong(); - private ValidDataSourceChecker validDataSourceChecker = new DefaultValidDataSourceChecker(); + protected DataSourceFailureDetecter validDataSourceChecker = new DefaultDataSourceFailureDetecter(); private long validDataSourceCheckPeriodMillis = 3000; private int schedulerThreadCount = 3; @@ -129,7 +129,7 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi public void failureDetect() { for (DruidDataSource dataSource : getDataSources().values()) { boolean isValid = validDataSourceChecker.isValid(dataSource); - if (isValid) { + if (!isValid) { handleNotAwailableDatasource(dataSource); } } @@ -147,11 +147,11 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi this.validDataSourceCheckPeriodMillis = validDataSourceCheckPeriodMillis; } - public ValidDataSourceChecker getValidDataSourceChecker() { + public DataSourceFailureDetecter getValidDataSourceChecker() { return validDataSourceChecker; } - public void setValidDataSourceChecker(ValidDataSourceChecker validDataSourceChecker) { + public void setValidDataSourceChecker(DataSourceFailureDetecter validDataSourceChecker) { this.validDataSourceChecker = validDataSourceChecker; } @@ -179,7 +179,9 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi public abstract Connection getConnectionInternal(MultiDataSourceConnection conn, String sql) throws SQLException; - public abstract void handleNotAwailableDatasource(DruidDataSource dataSource); + public void handleNotAwailableDatasource(DruidDataSource dataSource) { + dataSource.setEnable(false); + } @Override public String getDbType() { 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 f461fff239..ba950b154d 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSourceMBean.java @@ -2,5 +2,5 @@ package com.alibaba.druid.pool.ha; public interface MultiDataSourceMBean { - + void failureDetect(); } diff --git a/src/main/java/com/alibaba/druid/pool/ha/valid/ValidDataSourceChecker.java b/src/main/java/com/alibaba/druid/pool/ha/valid/DataSourceFailureDetecter.java similarity index 75% rename from src/main/java/com/alibaba/druid/pool/ha/valid/ValidDataSourceChecker.java rename to src/main/java/com/alibaba/druid/pool/ha/valid/DataSourceFailureDetecter.java index 8fcbaf4ecb..49a0ca11af 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/valid/ValidDataSourceChecker.java +++ b/src/main/java/com/alibaba/druid/pool/ha/valid/DataSourceFailureDetecter.java @@ -3,6 +3,6 @@ package com.alibaba.druid.pool.ha.valid; import com.alibaba.druid.pool.DruidDataSource; -public interface ValidDataSourceChecker { +public interface DataSourceFailureDetecter { boolean isValid(DruidDataSource dataSource); } diff --git a/src/main/java/com/alibaba/druid/pool/ha/valid/DefaultValidDataSourceChecker.java b/src/main/java/com/alibaba/druid/pool/ha/valid/DefaultDataSourceFailureDetecter.java similarity index 93% rename from src/main/java/com/alibaba/druid/pool/ha/valid/DefaultValidDataSourceChecker.java rename to src/main/java/com/alibaba/druid/pool/ha/valid/DefaultDataSourceFailureDetecter.java index beeef9f273..bd30bb5e51 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/valid/DefaultValidDataSourceChecker.java +++ b/src/main/java/com/alibaba/druid/pool/ha/valid/DefaultDataSourceFailureDetecter.java @@ -8,9 +8,9 @@ import com.alibaba.druid.logging.LogFactory; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.JdbcUtils; -public class DefaultValidDataSourceChecker implements ValidDataSourceChecker { +public class DefaultDataSourceFailureDetecter implements DataSourceFailureDetecter { - private final static Log LOG = LogFactory.getLog(DefaultValidDataSourceChecker.class); + private final static Log LOG = LogFactory.getLog(DefaultDataSourceFailureDetecter.class); private long maxWaitMillis = 3000;