增强监控

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@553 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-09-01 08:49:52 +00:00
parent 61feb05e25
commit 32a93bad5b
5 changed files with 95 additions and 17 deletions
@@ -18,6 +18,7 @@ package com.alibaba.druid.pool;
import java.sql.Connection;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -129,4 +130,26 @@ public final class ConnectionHolder {
}
statementTrace.clear();
}
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("{ID:");
buf.append(System.identityHashCode(conn));
buf.append(", ConnectTime:\"");
buf.append(JdbcUtils.toString(new Date(this.connecttimeMillis)));
buf.append("\", UseCount:");
buf.append(useCount);
if (lastActiveTimeMillis > 0) {
buf.append(", LastActiveTime:\"");
buf.append(JdbcUtils.toString(new Date(this.lastActiveTimeMillis)));
buf.append("\"");
}
buf.append("}");
return buf.toString();
}
}
@@ -277,9 +277,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
this.decrementActiveCountWithLock();
continue;
}
if (isTestWhileIdle()) {
long idleMillis = System.currentTimeMillis() - poolalbeConnection.getConnectionHolder().getLastActiveTimeMillis();
long idleMillis = System.currentTimeMillis()
- poolalbeConnection.getConnectionHolder().getLastActiveTimeMillis();
if (idleMillis >= this.getTimeBetweenEvictionRunsMillis()) {
boolean validate = testConnectionInternal(poolalbeConnection.getConnection());
if (!validate) {
@@ -291,7 +292,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
this.decrementActiveCountWithLock();
continue;
}
poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis());
poolalbeConnection.getConnectionHolder().setLastCheckTimeMillis(System.currentTimeMillis());
}
}
}
@@ -519,7 +520,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
try {
while (count == 0) {
if (minIdle == 0 || activeCount < maxActive) {
lowWater.signal(); // send signal to CreateThread create connection
lowWater.signal(); // send signal to CreateThread create connection
}
notEmpty.await();
@@ -652,7 +653,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
} else if (count >= minIdle) {
lowWater.await();
}
// 防止创建超过maxActive数量的连接
if (activeCount >= maxActive) {
continue;
@@ -734,13 +735,12 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
break;
}
ConnectionHolder connection = connections[i];
if (evictCount == 0 && idleCount == 0 && connection == null) {
continue FOR_0;
}
if (count - evictList.size() <= minIdle) {
break;
}
@@ -1159,11 +1159,56 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
} finally {
lock.unlock();
}
for (ConnectionHolder item : evictList) {
Connection connection = item.getConnection();
JdbcUtils.close(connection);
destroyCount++;
}
}
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("{");
buf.append("\n\tCreateTime:\"");
buf.append(getCreatedTime());
buf.append("\"");
buf.append(",\n\tActiveCount:");
buf.append(getActiveCount());
buf.append(",\n\tPoolingCount:");
buf.append(getPoolingCount());
buf.append(",\n\tCreateCount:");
buf.append(getCreateCount());
buf.append(",\n\tDestroyCount:");
buf.append(getDestroyCount());
buf.append(",\n\tCloseCount:");
buf.append(getCloseCount());
buf.append(",\n\tConnectCount:");
buf.append(getConnectCount());
buf.append(",\n\tConnections:[");
for (int i = 0; i < count; ++i) {
ConnectionHolder conn = connections[i];
if (conn != null) {
if (i != 0) {
buf.append(",");
}
buf.append("\n\t\t");
buf.append(conn.toString());
}
}
buf.append("\n\t]");
buf.append("\n}");
return buf.toString();
}
}
@@ -30,6 +30,7 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.Enumeration;
import java.util.Properties;
@@ -497,4 +498,9 @@ public final class JdbcUtils {
return buf.toString();
}
public static String toString(java.util.Date date) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return format.format(date);
}
}