This commit is contained in:
wenshao
2011-12-20 09:54:49 +08:00
parent f47bd5df4c
commit 1d79626981
4 changed files with 38 additions and 8 deletions
@@ -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);
}
}
}