From aed14f383a925495c995b651ecfd7ea798d659eb Mon Sep 17 00:00:00 2001 From: DigitalSonic Date: Fri, 10 Feb 2017 22:22:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3MySQL=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 查询超时单位是秒,默认1000秒太长了,估计当时搞错单位了 2.当方法没有传SQL时设定一个默认的SQL,而不是直接返回true --- .../druid/pool/vendor/MySqlValidConnectionChecker.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java index 9278799d55..a67352af80 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java @@ -33,7 +33,8 @@ import com.alibaba.druid.util.Utils; public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter implements ValidConnectionChecker, Serializable { - public static final int DEFAULT_VALIDATION_QUERY_TIMEOUT = 1000; + public static final int DEFAULT_VALIDATION_QUERY_TIMEOUT = 1; + public static final String DEFAULT_VALIDATION_QUERY = "SELECT 1"; private static final long serialVersionUID = 1L; private static final Log LOG = LogFactory.getLog(MySqlValidConnectionChecker.class); @@ -105,8 +106,9 @@ public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter i } } - if (validateQuery == null || validateQuery.length() == 0) { - return true; + String query = validateQuery; + if (validateQuery == null || validateQuery.isEmpty()) { + query = DEFAULT_VALIDATION_QUERY; } Statement stmt = null; @@ -116,7 +118,7 @@ public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter i if (validationQueryTimeout > 0) { stmt.setQueryTimeout(validationQueryTimeout); } - rs = stmt.executeQuery(validateQuery); + rs = stmt.executeQuery(query); return true; } finally { JdbcUtils.close(rs); From 9bb7ab9d7a45b8062f603471f6bf83f3ba0b3693 Mon Sep 17 00:00:00 2001 From: DigitalSonic Date: Fri, 10 Feb 2017 22:24:22 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3Oracle=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E5=99=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正原先的实现中isValidConnection方法忽略validationQueryTimeout参数的问题,优先使用validationQ ueryTimeout,然后才是timeout --- .../druid/pool/vendor/OracleValidConnectionChecker.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java index db54c93da3..5801fff455 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java @@ -70,15 +70,17 @@ public class OracleValidConnectionChecker extends ValidConnectionCheckerAdapter conn = ((ConnectionProxy) conn).getRawObject(); } - if (validateQuery == null || validateQuery.length() == 0) { + if (validateQuery == null || validateQuery.isEmpty()) { return true; } + int queryTimeout = validationQueryTimeout < 0 ? timeout : validationQueryTimeout; + Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); - stmt.setQueryTimeout(timeout); + stmt.setQueryTimeout(queryTimeout); rs = stmt.executeQuery(validateQuery); return true; } finally { From cba0d4fead88c82dcc5c4abd94cf782936209cd7 Mon Sep 17 00:00:00 2001 From: DigitalSonic Date: Fri, 10 Feb 2017 22:25:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3PG=E7=9A=84=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=99=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正stmt未设置查询超时的问题 --- .../alibaba/druid/pool/vendor/PGValidConnectionChecker.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/alibaba/druid/pool/vendor/PGValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/PGValidConnectionChecker.java index 5c81948204..f9903ea785 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/PGValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/PGValidConnectionChecker.java @@ -30,6 +30,8 @@ public class PGValidConnectionChecker extends ValidConnectionCheckerAdapter impl private static final long serialVersionUID = -2227528634302168877L; + private int defaultQueryTimeout = 1; + private String defaultValidateQuery = "SELECT 'x'"; public PGValidConnectionChecker(){ @@ -53,10 +55,13 @@ public class PGValidConnectionChecker extends ValidConnectionCheckerAdapter impl conn = ((ConnectionProxy) conn).getRawObject(); } + int queryTimeout = validationQueryTimeout < 0 ? defaultQueryTimeout : validationQueryTimeout; + Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); + stmt.setQueryTimeout(queryTimeout); rs = stmt.executeQuery(validateQuery); return true; } finally {