mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
171 lines
3.7 KiB
Java
171 lines
3.7 KiB
Java
package com.alibaba.druid.pool.ha;
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
import com.alibaba.druid.logging.Log;
|
|
import com.alibaba.druid.logging.LogFactory;
|
|
import com.alibaba.druid.pool.DruidDataSource;
|
|
import com.alibaba.druid.pool.ManagedDataSource;
|
|
|
|
public class HADataSource extends MultiDataSource implements HADataSourceMBean, ManagedDataSource, DataSource {
|
|
|
|
private final static Log LOG = LogFactory.getLog(HADataSource.class);
|
|
|
|
protected DataSourceHolder master;
|
|
protected DataSourceHolder slave;
|
|
|
|
public HADataSource(){
|
|
|
|
}
|
|
|
|
public void resetStat() {
|
|
super.resetStat();
|
|
|
|
master.resetState();
|
|
slave.resetState();
|
|
}
|
|
|
|
public long getMasterConnectCount() {
|
|
return master.getConnectCount();
|
|
}
|
|
|
|
public long getSlaveConnectCount() {
|
|
return slave.getConnectCount();
|
|
}
|
|
|
|
public DataSourceHolder getMaster() {
|
|
return master;
|
|
}
|
|
|
|
public void restartMaster() {
|
|
this.restartDataSource("master");
|
|
}
|
|
|
|
public void restartSlave() {
|
|
this.restartDataSource("slave");
|
|
}
|
|
|
|
public void setMaster(DruidDataSource master) {
|
|
this.setMaster(new DataSourceHolder(master));
|
|
}
|
|
|
|
public void setMaster(DataSourceHolder master) {
|
|
this.addDataSource("master", master);
|
|
this.master = master;
|
|
}
|
|
|
|
public DataSourceHolder getSlave() {
|
|
return slave;
|
|
}
|
|
|
|
public void setSlave(DruidDataSource slave) {
|
|
this.setSlave(new DataSourceHolder(slave));
|
|
}
|
|
|
|
public void setSlave(DataSourceHolder slave) {
|
|
this.addDataSource("slave", slave);
|
|
this.slave = slave;
|
|
}
|
|
|
|
public boolean isMasterEnable() {
|
|
if (master == null) {
|
|
return false;
|
|
}
|
|
|
|
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) {
|
|
throw new IllegalStateException("slave is null");
|
|
}
|
|
|
|
master.setEnable(value);
|
|
}
|
|
|
|
public String getMasterUrl() {
|
|
if (master == null) {
|
|
return null;
|
|
}
|
|
|
|
return master.getUrl();
|
|
}
|
|
|
|
public String getSlaveUrl() {
|
|
if (slave == null) {
|
|
return null;
|
|
}
|
|
|
|
return slave.getUrl();
|
|
}
|
|
|
|
public int getMasterWeight() {
|
|
return master.getWeight();
|
|
}
|
|
|
|
public int getSlaveWeight() {
|
|
return slave.getWeight();
|
|
}
|
|
|
|
public int getMasterWeightRegionBegin() {
|
|
return master.getWeightRegionBegin();
|
|
}
|
|
|
|
public int getMasterWeightRegionEnd() {
|
|
return master.getWeightRegionEnd();
|
|
}
|
|
|
|
public int getSlaveWeightRegionBegin() {
|
|
return slave.getWeightRegionBegin();
|
|
}
|
|
|
|
public int getSlaveWeightRegionEnd() {
|
|
return slave.getWeightRegionEnd();
|
|
}
|
|
|
|
public boolean isSlaveEnable() {
|
|
if (slave == null) {
|
|
return false;
|
|
}
|
|
|
|
return slave.isEnable();
|
|
}
|
|
|
|
public void setSlaveEnable(boolean value) {
|
|
if (slave == null) {
|
|
throw new IllegalStateException("slave is null");
|
|
}
|
|
|
|
slave.setEnable(value);
|
|
}
|
|
|
|
public void switchMasterSlave() {
|
|
DataSourceHolder tmp = this.getMaster();
|
|
this.setMaster(this.getSlave());
|
|
this.setSlave(tmp);
|
|
}
|
|
|
|
public void close() {
|
|
super.close();
|
|
if (LOG.isDebugEnabled()) {
|
|
LOG.debug("HADataSource closed");
|
|
}
|
|
}
|
|
}
|