From 6e362a137a9470d7bec268336dad92b9ae5e7630 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 17 Jul 2011 09:53:47 +0000 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81HA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@468 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/ha/HADataSource.java | 19 ++++++++++++++----- .../{BalancePolicy.java => Balancer.java} | 2 +- ...ancePolicy.java => RoundRobinBlancer.java} | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) rename src/main/java/com/alibaba/druid/pool/ha/balance/{BalancePolicy.java => Balancer.java} (87%) rename src/main/java/com/alibaba/druid/pool/ha/balance/{RoundRobinBlancePolicy.java => RoundRobinBlancer.java} (89%) 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 {