mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
fix : get connection does not execute sql and return, add config 'checkExecuteTime', use 'lastExecTimeMillis' instead of 'lastActiveTimeMillis'
This commit is contained in:
@@ -1464,6 +1464,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
if (holder != null) {
|
||||
holder.lastValidTimeMillis = currentTimeMillis;
|
||||
holder.lastExecTimeMillis = currentTimeMillis;
|
||||
}
|
||||
|
||||
if (valid && isMySql) { // unexcepted branch
|
||||
|
||||
@@ -51,6 +51,7 @@ public final class DruidConnectionHolder {
|
||||
protected final List<StatementEventListener> statementEventListeners = new CopyOnWriteArrayList<StatementEventListener>();
|
||||
protected final long connectTimeMillis;
|
||||
protected volatile long lastActiveTimeMillis;
|
||||
protected volatile long lastExecTimeMillis;
|
||||
protected volatile long lastKeepTimeMillis;
|
||||
protected volatile long lastValidTimeMillis;
|
||||
protected long useCount = 0;
|
||||
@@ -97,6 +98,7 @@ public final class DruidConnectionHolder {
|
||||
|
||||
this.connectTimeMillis = System.currentTimeMillis();
|
||||
this.lastActiveTimeMillis = connectTimeMillis;
|
||||
this.lastExecTimeMillis = connectTimeMillis;
|
||||
|
||||
this.underlyingAutoCommit = conn.getAutoCommit();
|
||||
|
||||
@@ -153,6 +155,10 @@ public final class DruidConnectionHolder {
|
||||
this.defaultReadOnly = underlyingReadOnly;
|
||||
}
|
||||
|
||||
public long getConnectTimeMillis() {
|
||||
return connectTimeMillis;
|
||||
}
|
||||
|
||||
public boolean isUnderlyingReadOnly() {
|
||||
return underlyingReadOnly;
|
||||
}
|
||||
@@ -193,6 +199,14 @@ public final class DruidConnectionHolder {
|
||||
this.lastActiveTimeMillis = lastActiveMillis;
|
||||
}
|
||||
|
||||
public long getLastExecTimeMillis() {
|
||||
return lastExecTimeMillis;
|
||||
}
|
||||
|
||||
public void setLastExecTimeMillis(long lastExecTimeMillis) {
|
||||
this.lastExecTimeMillis = lastExecTimeMillis;
|
||||
}
|
||||
|
||||
public void addTrace(DruidPooledStatement stmt) {
|
||||
lock.lock();
|
||||
try {
|
||||
|
||||
@@ -172,6 +172,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
private volatile boolean keepAlive = false;
|
||||
private boolean asyncInit = false;
|
||||
protected boolean killWhenSocketReadTimeout = false;
|
||||
protected boolean checkExecuteTime = false;
|
||||
|
||||
private static List<Filter> autoFilters = null;
|
||||
private boolean loadSpifilterSkip = false;
|
||||
@@ -526,6 +527,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
loadSpifilterSkip = true;
|
||||
}
|
||||
}
|
||||
{
|
||||
String property = System.getProperty("druid.checkExecuteTime");
|
||||
if (property != null && !"false".equals(property)) {
|
||||
checkExecuteTime = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isKillWhenSocketReadTimeout() {
|
||||
@@ -1426,8 +1433,14 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
final DruidConnectionHolder holder = poolableConnection.holder;
|
||||
long currentTimeMillis = System.currentTimeMillis();
|
||||
long lastActiveTimeMillis = holder.lastActiveTimeMillis;
|
||||
long lastExecTimeMillis = holder.lastExecTimeMillis;
|
||||
long lastKeepTimeMillis = holder.lastKeepTimeMillis;
|
||||
|
||||
if (checkExecuteTime
|
||||
&& lastExecTimeMillis != lastActiveTimeMillis) {
|
||||
lastActiveTimeMillis = lastExecTimeMillis;
|
||||
}
|
||||
|
||||
if (lastKeepTimeMillis > lastActiveTimeMillis) {
|
||||
lastActiveTimeMillis = lastKeepTimeMillis;
|
||||
}
|
||||
@@ -3804,4 +3817,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
|
||||
public boolean isClosed() {
|
||||
return this.closed;
|
||||
}
|
||||
|
||||
public boolean isCheckExecuteTime() {
|
||||
return checkExecuteTime;
|
||||
}
|
||||
|
||||
public void setCheckExecuteTime(boolean checkExecuteTime) {
|
||||
this.checkExecuteTime = checkExecuteTime;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -712,12 +712,17 @@ public class DruidPooledConnection extends PoolableWrapper implements javax.sql.
|
||||
try {
|
||||
conn.setAutoCommit(autoCommit);
|
||||
holder.setUnderlyingAutoCommit(autoCommit);
|
||||
holder.setLastExecTimeMillis(System.currentTimeMillis());
|
||||
} catch (SQLException ex) {
|
||||
handleException(ex, null);
|
||||
}
|
||||
}
|
||||
|
||||
protected void transactionRecord(String sql) throws SQLException {
|
||||
if (holder != null) {
|
||||
holder.setLastExecTimeMillis(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
if (transactionInfo == null && (!conn.getAutoCommit())) {
|
||||
DruidAbstractDataSource dataSource = holder.getDataSource();
|
||||
dataSource.incrementStartTransactionCount();
|
||||
|
||||
Reference in New Issue
Block a user