diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 769c138f4a..3dc600d128 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -170,6 +170,8 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements protected volatile long timeBetweenConnectErrorMillis = DEFAULT_TIME_BETWEEN_CONNECT_ERROR_MILLIS; protected volatile ValidConnectionChecker validConnectionChecker = null; + + protected volatile boolean usePingMethod = false; protected final Map activeConnections = new IdentityHashMap(); protected final static Object PRESENT = new Object(); @@ -641,6 +643,14 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements this.validConnectionChecker = validConnectionChecker; } + public boolean isUsePingMethod() { + return usePingMethod; + } + + public void setUsePingMethod(boolean usePingMethod) { + this.usePingMethod = usePingMethod; + } + public String getValidConnectionCheckerClassName() { if (validConnectionChecker == null) { return null; diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index 5ee986397a..302cfafd1d 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -1318,7 +1318,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat String realDriverClassName = driver.getClass().getName(); if (JdbcUtils.isMySqlDriver(realDriverClassName)) { - this.validConnectionChecker = new MySqlValidConnectionChecker(); + this.validConnectionChecker = new MySqlValidConnectionChecker(usePingMethod); } else if (realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER) || realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER2)) { 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 5faa3d9f36..c403c50a4f 100644 --- a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java +++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java @@ -45,7 +45,7 @@ public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter i private Method ping; private boolean usePingMethod = false; - public MySqlValidConnectionChecker(){ + public MySqlValidConnectionChecker(boolean usePingMethod){ try { clazz = Utils.loadClass("com.mysql.jdbc.MySQLConnection"); if (clazz == null) { @@ -56,8 +56,8 @@ public class MySqlValidConnectionChecker extends ValidConnectionCheckerAdapter i ping = clazz.getMethod("pingInternal", boolean.class, int.class); } - if (ping != null) { - usePingMethod = true; + if (ping != null && usePingMethod == true) { + this.usePingMethod = true; } } catch (Exception e) { LOG.warn("Cannot resolve com.mysql.jdbc.Connection.ping method. Will use 'SELECT 1' instead.", e);