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 7cc99c9a77..3bccbc13c3 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -13,6 +13,8 @@ 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.ha.balance.Balancer; +import com.alibaba.druid.pool.ha.balance.RoundRobinBlancer; public class HADataSource extends MultiDataSource implements DataSource { @@ -22,7 +24,9 @@ public class HADataSource extends MultiDataSource implements DataSource { protected ArrayList dataSources = new ArrayList(); protected final List notAvailableDatasources = new CopyOnWriteArrayList(); - + + protected Balancer balancer = new RoundRobinBlancer(); + public HADataSource(){ } @@ -40,11 +44,16 @@ public class HADataSource extends MultiDataSource implements DataSource { return new MultiDataSourceConnection(this, createConnectionId()); } - protected int indexFor(MultiDataSourceConnection multiDataSourceConnection, String sql) throws SQLException { - int size = dataSources.size(); - int connectionId = (int) multiDataSourceConnection.getId(); + public Balancer getBalancer() { + return balancer; + } - return connectionId % size; + public void setBalancer(Balancer balancer) { + this.balancer = balancer; + } + + protected int indexFor(MultiDataSourceConnection connection, String sql) throws SQLException { + return balancer.indexFor(connection, sql); } public Connection getConnectionInternal(MultiDataSourceConnection multiDataSourceConnection, String sql) throws SQLException { diff --git a/src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java b/src/main/java/com/alibaba/druid/pool/ha/balance/Balancer.java similarity index 87% rename from src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java rename to src/main/java/com/alibaba/druid/pool/ha/balance/Balancer.java index f176700dfc..463526529f 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java +++ b/src/main/java/com/alibaba/druid/pool/ha/balance/Balancer.java @@ -4,6 +4,6 @@ import java.sql.SQLException; import com.alibaba.druid.pool.ha.MultiDataSourceConnection; -public interface BalancePolicy { +public interface Balancer { int indexFor(MultiDataSourceConnection connection, String sql) throws SQLException; } diff --git a/src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancePolicy.java b/src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancer.java similarity index 89% rename from src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancePolicy.java rename to src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancer.java index 757fc8bc6f..c1bec11ae9 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancePolicy.java +++ b/src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancer.java @@ -5,7 +5,7 @@ import java.sql.SQLException; import com.alibaba.druid.pool.ha.MultiDataSource; import com.alibaba.druid.pool.ha.MultiDataSourceConnection; -public class RoundRobinBlancePolicy implements BalancePolicy { +public class RoundRobinBlancer implements Balancer { @Override public int indexFor(MultiDataSourceConnection connection, String sql) throws SQLException {