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 0e91da9b85..7cc99c9a77 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/HADataSource.java @@ -22,7 +22,7 @@ public class HADataSource extends MultiDataSource implements DataSource { protected ArrayList dataSources = new ArrayList(); protected final List notAvailableDatasources = new CopyOnWriteArrayList(); - + public HADataSource(){ } @@ -40,7 +40,7 @@ public class HADataSource extends MultiDataSource implements DataSource { return new MultiDataSourceConnection(this, createConnectionId()); } - protected int indexFor(MultiDataSourceConnection multiDataSourceConnection, String sql) { + protected int indexFor(MultiDataSourceConnection multiDataSourceConnection, String sql) throws SQLException { int size = dataSources.size(); int connectionId = (int) multiDataSourceConnection.getId(); diff --git a/src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java b/src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java new file mode 100644 index 0000000000..f176700dfc --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java @@ -0,0 +1,9 @@ +package com.alibaba.druid.pool.ha.balance; + +import java.sql.SQLException; + +import com.alibaba.druid.pool.ha.MultiDataSourceConnection; + +public interface BalancePolicy { + 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/RoundRobinBlancePolicy.java new file mode 100644 index 0000000000..757fc8bc6f --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancePolicy.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.pool.ha.balance; + +import java.sql.SQLException; + +import com.alibaba.druid.pool.ha.MultiDataSource; +import com.alibaba.druid.pool.ha.MultiDataSourceConnection; + +public class RoundRobinBlancePolicy implements BalancePolicy { + + @Override + public int indexFor(MultiDataSourceConnection connection, String sql) throws SQLException { + MultiDataSource dataSource = connection.getHaDataSource(); + + int size = dataSource.getDataSources().size(); + long connectionId = (int) connection.getId(); + + return (int) (connectionId % size); + } + +}