mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed for testWhileIdle.
This commit is contained in:
@@ -226,7 +226,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
|
||||
protected volatile long lastCreateStartTimeMillis;
|
||||
|
||||
protected boolean isOracle = false;
|
||||
|
||||
protected boolean isMySql = false;
|
||||
protected boolean useOracleImplicitCache = true;
|
||||
|
||||
protected ReentrantLock lock;
|
||||
@@ -1354,18 +1354,20 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
|
||||
holder.lastValidTimeMillis = currentTimeMillis;
|
||||
}
|
||||
|
||||
if (valid && JdbcConstants.MYSQL_DRIVER.equals(driverClass)) { // unexcepted branch
|
||||
if (valid && isMySql) { // unexcepted branch
|
||||
long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
|
||||
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
|
||||
if (lastPacketReceivedTimeMs > 0 //
|
||||
&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
|
||||
discardConnection(conn);
|
||||
String errorMsg = "discard long time none received connection. "
|
||||
+ ", jdbcUrl : " + jdbcUrl
|
||||
+ ", jdbcUrl : " + jdbcUrl
|
||||
+ ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis;
|
||||
LOG.error(errorMsg);
|
||||
return false;
|
||||
if (lastPacketReceivedTimeMs > 0) {
|
||||
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
|
||||
if (lastPacketReceivedTimeMs > 0 //
|
||||
&& mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
|
||||
discardConnection(conn);
|
||||
String errorMsg = "discard long time none received connection. "
|
||||
+ ", jdbcUrl : " + jdbcUrl
|
||||
+ ", jdbcUrl : " + jdbcUrl
|
||||
+ ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis;
|
||||
LOG.error(errorMsg);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1082,6 +1082,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
oracleValidationQueryCheck();
|
||||
} else if (JdbcUtils.DB2.equals(dbType)) {
|
||||
db2ValidationQueryCheck();
|
||||
} else if (JdbcUtils.MYSQL.equals(this.dbType)
|
||||
|| JdbcUtils.MYSQL_DRIVER_6.equals(this.dbType)) {
|
||||
isMySql = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1182,6 +1185,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
if (realDriverClassName.equals(JdbcConstants.MYSQL_DRIVER) //
|
||||
|| realDriverClassName.equals(JdbcConstants.MYSQL_DRIVER_6)) {
|
||||
this.exceptionSorter = new MySqlExceptionSorter();
|
||||
this.isMySql = true;
|
||||
} else if (realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER)
|
||||
|| realDriverClassName.equals(JdbcConstants.ORACLE_DRIVER2)) {
|
||||
this.exceptionSorter = new OracleExceptionSorter();
|
||||
|
||||
@@ -293,6 +293,10 @@ public class MySqlUtils {
|
||||
|
||||
try {
|
||||
Object connImpl = conn.unwrap(class_connectionImpl);
|
||||
if (connImpl == null) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
Object mysqlio = method_getIO.invoke(connImpl);
|
||||
Long ms = (Long) method_getLastPacketReceivedTimeMs.invoke(mysqlio);
|
||||
return ms.longValue();
|
||||
|
||||
Reference in New Issue
Block a user