From 2aa90d656ad47602df25f982f608ae169a758242 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 6 Jul 2011 14:16:58 +0000 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81setEnable?= 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@352 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../com/alibaba/druid/ha/HADataSource.java | 6 +- .../pool/DataSourceDisableException.java | 21 +++++++ .../alibaba/druid/pool/DruidDataSource.java | 61 ++++++++++++------- .../alibaba/druid/pool/ManagedDataSource.java | 10 +++ 4 files changed, 75 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/pool/DataSourceDisableException.java create mode 100644 src/main/java/com/alibaba/druid/pool/ManagedDataSource.java diff --git a/src/main/java/com/alibaba/druid/ha/HADataSource.java b/src/main/java/com/alibaba/druid/ha/HADataSource.java index 0c86f74b80..dc45c6157c 100644 --- a/src/main/java/com/alibaba/druid/ha/HADataSource.java +++ b/src/main/java/com/alibaba/druid/ha/HADataSource.java @@ -8,14 +8,16 @@ import java.util.concurrent.CopyOnWriteArrayList; import javax.sql.DataSource; +import com.alibaba.druid.pool.DruidDataSource; + public class HADataSource implements DataSource { - private final List dataSources = new CopyOnWriteArrayList(); + private final List dataSources = new CopyOnWriteArrayList(); private int loginTimeout = 0; private PrintWriter logWriter = new PrintWriter(System.out); - public List getDataSources() { + public List getDataSources() { return dataSources; } diff --git a/src/main/java/com/alibaba/druid/pool/DataSourceDisableException.java b/src/main/java/com/alibaba/druid/pool/DataSourceDisableException.java new file mode 100644 index 0000000000..751a6185ac --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/DataSourceDisableException.java @@ -0,0 +1,21 @@ +package com.alibaba.druid.pool; + +import java.sql.SQLException; + +public class DataSourceDisableException extends SQLException { + + private static final long serialVersionUID = 1L; + + public DataSourceDisableException(){ + super(); + } + + public DataSourceDisableException(String reason){ + super(reason); + } + + public DataSourceDisableException(Throwable cause){ + super(cause); + } + +} diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index ed2727b552..e20604f5fc 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -56,8 +56,9 @@ import com.alibaba.druid.util.JdbcUtils; /** * @author wenshao */ -public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, Referenceable { - private final static Log LOG = LogFactory.getLog(DruidDataSource.class); +public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable { + + private final static Log LOG = LogFactory.getLog(DruidDataSource.class); private static final Object PRESENT = new Object(); private static final IdentityHashMap instances = new IdentityHashMap(); @@ -97,6 +98,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private long id; private Date createdTime; + private boolean enable; + public DruidDataSource(){ } @@ -104,6 +107,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return createdTime; } + public boolean isEnable() { + return enable; + } + + public void setEnable(boolean enable) { + this.enable = enable; + } + private void init() throws SQLException { if (inited) { return; @@ -250,11 +261,19 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private PoolableConnection getConnectionInternal() throws SQLException { PoolableConnection poolalbeConnection; + if (!enable) { + throw new DataSourceDisableException(); + } + try { lock.lockInterruptibly(); connectCount++; + if (!enable) { + throw new DataSourceDisableException(); + } + ConnectionHolder holder; for (;;) { if (maxWait > 0) { @@ -735,7 +754,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public long getID() { return this.id; } - + private int getRawDriverMajorVersion() { int version = -1; if (this.driver != null) { @@ -743,7 +762,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } return version; } - + private int getRawDriverMinorVersion() { int version = -1; if (this.driver != null) { @@ -751,19 +770,19 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } return version; } - + private String getProperties() { if (this.connectionProperties == null) { return null; } - + Properties properties = new Properties(this.connectionProperties); if (properties.contains("password")) { properties.put("password", "******"); } return properties.toString(); } - + public String[] getFilterClasses() { List filterConfigList = getFilters(); @@ -889,43 +908,43 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat map.put("ConnectionErrorLastTime", stat.getConnectionStat().getErrorLastTime()); map.put("ConnectionAliveMillisMax", stat.getConnectionConnectAliveMillisMax()); map.put("ConnectionAliveMillisMin", stat.getConnectionConnectAliveMillisMin()); - + map.put("ConnectionCount_Alive_0_1_Seconds", stat.getConnectionCount_Alive_0_1_Seconds()); map.put("ConnectionCount_Alive_1_5_Seconds", stat.getConnectionCount_Alive_1_5_Seconds()); map.put("ConnectionCount_Alive_5_10_Seconds", stat.getConnectionCount_Alive_5_10_Seconds()); map.put("ConnectionCount_Alive_10_30_Seconds", stat.getConnectionCount_Alive_10_30_Seconds()); map.put("ConnectionCount_Alive_30_60_Seconds", stat.getConnectionCount_Alive_30_60_Seconds()); - + map.put("ConnectionCount_Alive_1_5_Minutes", stat.getConnectionCount_Alive_1_5_Minutes()); map.put("ConnectionCount_Alive_5_10_Minutes", stat.getConnectionCount_Alive_5_10_Minutes()); map.put("ConnectionCount_Alive_10_30_Minutes", stat.getConnectionCount_Alive_10_30_Minutes()); map.put("ConnectionCount_Alive_30_60_Minutes", stat.getConnectionCount_Alive_30_60_Minutes()); map.put("ConnectionCount_Alive_1_6_Hours", stat.getConnectionCount_Alive_1_6_Hours()); - + map.put("ConnectionCount_Alive_6_24_Hours", stat.getConnectionCount_Alive_6_24_Hours()); map.put("ConnectionCount_Alive_1_7_Day", stat.getConnectionCount_Alive_1_7_day()); map.put("ConnectionCount_Alive_7_30_Day", stat.getConnectionCount_Alive_7_30_Day()); map.put("ConnectionCount_Alive_30_90_Day", stat.getConnectionCount_Alive_30_90_Day()); map.put("ConnectionCount_Alive_90_more_Day", stat.getConnectionCount_Alive_90_more_Day()); - + map.put("StatementExecuteCount_0_1_Millis", stat.getStatementStat().getCount_0_1_Millis()); map.put("StatementExecuteCount_1_2_Millis", stat.getStatementStat().getCount_1_2_Millis()); map.put("StatementExecuteCount_2_5_Millis", stat.getStatementStat().getCount_2_5_Millis()); map.put("StatementExecuteCount_5_10_Millis", stat.getStatementStat().getCount_5_10_Millis()); map.put("StatementExecuteCount_10_20_Millis", stat.getStatementStat().getCount_10_20_Millis()); - + map.put("StatementExecuteCount_20_50_Millis", stat.getStatementStat().getCount_20_50_Millis()); map.put("StatementExecuteCount_50_100_Millis", stat.getStatementStat().getCount_50_100_Millis()); map.put("StatementExecuteCount_100_200_Millis", stat.getStatementStat().getCount_100_200_Millis()); map.put("StatementExecuteCount_200_500_Millis", stat.getStatementStat().getCount_200_500_Millis()); map.put("StatementExecuteCount_500_1000_Millis", stat.getStatementStat().getCount_500_1000_Millis()); - + map.put("StatementExecuteCount_1_2_Seconds", stat.getStatementStat().getCount_1_2_Seconds()); map.put("StatementExecuteCount_2_5_Seconds", stat.getStatementStat().getCount_2_5_Seconds()); map.put("StatementExecuteCount_5_10_Seconds", stat.getStatementStat().getCount_5_10_Seconds()); map.put("StatementExecuteCount_10_30_Seconds", stat.getStatementStat().getCount_10_30_Seconds()); map.put("StatementExecuteCount_30_60_Seconds", stat.getStatementStat().getCount_30_60_Seconds()); - + map.put("StatementExecuteCount_1_2_Minutes", stat.getStatementStat().getCount_1_2_minutes()); map.put("StatementExecuteCount_2_5_Minutes", stat.getStatementStat().getCount_2_5_minutes()); map.put("StatementExecuteCount_5_10_Minutes", stat.getStatementStat().getCount_5_10_minutes()); @@ -984,43 +1003,43 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat map.put("ConnectionErrorLastTime", null); map.put("ConnectionAliveMillisMax", null); map.put("ConnectionAliveMillisMin", null); - + map.put("ConnectionCount_Alive_0_1_Seconds", null); map.put("ConnectionCount_Alive_1_5_Seconds", null); map.put("ConnectionCount_Alive_5_10_Seconds", null); map.put("ConnectionCount_Alive_10_30_Seconds", null); map.put("ConnectionCount_Alive_30_60_Seconds", null); - + map.put("ConnectionCount_Alive_1_5_Minutes", null); map.put("ConnectionCount_Alive_5_10_Minutes", null); map.put("ConnectionCount_Alive_10_30_Minutes", null); map.put("ConnectionCount_Alive_30_60_Minutes", null); map.put("ConnectionCount_Alive_1_6_Hours", null); - + map.put("ConnectionCount_Alive_6_24_Hours", null); map.put("ConnectionCount_Alive_1_7_Day", null); map.put("ConnectionCount_Alive_7_30_Day", null); map.put("ConnectionCount_Alive_30_90_Day", null); map.put("ConnectionCount_Alive_90_more_Day", null); - + map.put("StatementExecuteCount_0_1_Millis", null); map.put("StatementExecuteCount_1_2_Millis", null); map.put("StatementExecuteCount_2_5_Millis", null); map.put("StatementExecuteCount_5_10_Millis", null); map.put("StatementExecuteCount_10_20_Millis", null); - + map.put("StatementExecuteCount_20_50_Millis", null); map.put("StatementExecuteCount_50_100_Millis", null); map.put("StatementExecuteCount_100_200_Millis", null); map.put("StatementExecuteCount_200_500_Millis", null); map.put("StatementExecuteCount_500_1000_Millis", null); - + map.put("StatementExecuteCount_1_2_Seconds", null); map.put("StatementExecuteCount_2_5_Seconds", null); map.put("StatementExecuteCount_5_10_Seconds", null); map.put("StatementExecuteCount_10_30_Seconds", null); map.put("StatementExecuteCount_30_60_Seconds", null); - + map.put("StatementExecuteCount_1_2_Minutes", null); map.put("StatementExecuteCount_2_5_Minutes", null); map.put("StatementExecuteCount_5_10_Minutes", null); diff --git a/src/main/java/com/alibaba/druid/pool/ManagedDataSource.java b/src/main/java/com/alibaba/druid/pool/ManagedDataSource.java new file mode 100644 index 0000000000..169062ff7b --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/ManagedDataSource.java @@ -0,0 +1,10 @@ +package com.alibaba.druid.pool; + +import javax.sql.DataSource; + +public interface ManagedDataSource extends DataSource { + + boolean isEnable(); + + void setEnable(boolean value); +}