mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
ha
This commit is contained in:
@@ -9,10 +9,12 @@ import com.alibaba.druid.pool.DruidDataSource;
|
||||
|
||||
public class DataSourceHolder implements Closeable {
|
||||
|
||||
private final DruidDataSource dataSource;
|
||||
private boolean enable = true;
|
||||
private final AtomicLong connectCount = new AtomicLong();
|
||||
private final AtomicLong connectErrorCount = new AtomicLong();
|
||||
private final DruidDataSource dataSource;
|
||||
private boolean enable = true;
|
||||
private final AtomicLong connectCount = new AtomicLong();
|
||||
private final AtomicLong connectErrorCount = new AtomicLong();
|
||||
|
||||
private boolean fail = false;
|
||||
|
||||
public DataSourceHolder(DruidDataSource dataSource){
|
||||
if (dataSource == null) {
|
||||
@@ -26,13 +28,21 @@ public class DataSourceHolder implements Closeable {
|
||||
}
|
||||
|
||||
public boolean isEnable() {
|
||||
return enable;
|
||||
return enable && (!fail);
|
||||
}
|
||||
|
||||
public void setEnable(boolean enable) {
|
||||
this.enable = enable;
|
||||
}
|
||||
|
||||
public boolean isFail() {
|
||||
return fail;
|
||||
}
|
||||
|
||||
public void setFail(boolean fail) {
|
||||
this.fail = fail;
|
||||
}
|
||||
|
||||
public DruidDataSource getDataSource() {
|
||||
return dataSource;
|
||||
}
|
||||
@@ -66,7 +76,7 @@ public class DataSourceHolder implements Closeable {
|
||||
public void close() {
|
||||
dataSource.close();
|
||||
}
|
||||
|
||||
|
||||
public void restart() {
|
||||
dataSource.restart();
|
||||
}
|
||||
|
||||
@@ -78,6 +78,22 @@ public class HADataSource extends MultiDataSource implements HADataSourceMBean,
|
||||
|
||||
return master.isEnable();
|
||||
}
|
||||
|
||||
public boolean isMasterFail() {
|
||||
if (master == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return master.isFail();
|
||||
}
|
||||
|
||||
public boolean isSlaveFail() {
|
||||
if (slave == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return slave.isFail();
|
||||
}
|
||||
|
||||
public void setMasterEnable(boolean value) {
|
||||
if (master == null) {
|
||||
|
||||
@@ -24,4 +24,8 @@ public interface HADataSourceMBean extends MultiDataSourceMBean {
|
||||
void restartMaster();
|
||||
|
||||
void restartSlave();
|
||||
|
||||
boolean isMasterFail();
|
||||
|
||||
boolean isSlaveFail();
|
||||
}
|
||||
|
||||
@@ -129,9 +129,9 @@ public abstract class MultiDataSource extends DataSourceAdapter implements Multi
|
||||
for (DataSourceHolder dataSourceHolder : getDataSources().values()) {
|
||||
boolean isValid = validDataSourceChecker.isValid(dataSourceHolder.getDataSource());
|
||||
if (!isValid) {
|
||||
dataSourceHolder.setEnable(false);
|
||||
dataSourceHolder.setFail(true);
|
||||
} else {
|
||||
dataSourceHolder.setEnable(true);
|
||||
dataSourceHolder.setFail(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user