From bf24a2c64688f9ac6df50e15121958e4582dd2b2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 17 Jul 2011 09:50:58 +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@467 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/ha/HADataSource.java | 4 ++-- .../druid/pool/ha/balance/BalancePolicy.java | 9 +++++++++ .../ha/balance/RoundRobinBlancePolicy.java | 20 +++++++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/pool/ha/balance/BalancePolicy.java create mode 100644 src/main/java/com/alibaba/druid/pool/ha/balance/RoundRobinBlancePolicy.java 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); + } + +}