为什么 DBCP getNumIdle 总是 return 0?活动连接何时变为空闲?
Why DBCP getNumIdle always return 0? When does active connection become idle?
我正在使用 DBCP2 BasicDataSource 来管理数据库连接。当我测试时,我使用 getNumActive() 和 getNumIdle() 打印出池状态。我最终活动连接不断增加,而空闲连接始终为 0。
这是我的代码:
public static Connection getCnn() throws Exception {
Connection cnn = null;
if (ds.isClosed()){
init();
logger.warn("DataSource is closed. Rebuild BasicDataSource from getCnn");
}
logger.trace("Request for connection");
cnn = ds.getConnection();
// Monitor current connecton pool
// change to logger.trace in future for performance.
logger.warn("Current Connection Pool: "
+ "\n MaxTotal of connection - " + String.valueOf(maxTotal)
+ "\n Number of active connection - " + String.valueOf(ds.getNumActive())
+ "\n Number of idle connecton - " + String.valueOf(ds.getNumIdle()));
return cnn;
我的 BasicDataSource 配置是
MinIdle = "8"
MaxIdle = "16"
MaxTotal = "-1"
maxOpenPreparedStatements = "256"
RemoveAbandonedTimeout = "300"
RemoveAbandonedOnBorrow = "true"
并且输出空闲连接数始终为 0,并且无论我等待连接空闲多长时间,活动连接都会继续增加。
那么在什么情况下连接会变成"idle"?我找不到任何超时设置来强制连接空闲。
任何见解将不胜感激!
我不确定您是否正在关闭连接对象。一旦您关闭连接对象,活动连接将减少,空闲连接将增加。
当您执行 "ds.getConnection()" 时,将创建一个连接(对象)或检索并返回一个已关闭的已创建连接(对象)。收到的连接对象被认为是活动的,直到关闭被调用。准备好被重用的已关闭连接对象是空闲连接。
我正在使用 DBCP2 BasicDataSource 来管理数据库连接。当我测试时,我使用 getNumActive() 和 getNumIdle() 打印出池状态。我最终活动连接不断增加,而空闲连接始终为 0。
这是我的代码:
public static Connection getCnn() throws Exception {
Connection cnn = null;
if (ds.isClosed()){
init();
logger.warn("DataSource is closed. Rebuild BasicDataSource from getCnn");
}
logger.trace("Request for connection");
cnn = ds.getConnection();
// Monitor current connecton pool
// change to logger.trace in future for performance.
logger.warn("Current Connection Pool: "
+ "\n MaxTotal of connection - " + String.valueOf(maxTotal)
+ "\n Number of active connection - " + String.valueOf(ds.getNumActive())
+ "\n Number of idle connecton - " + String.valueOf(ds.getNumIdle()));
return cnn;
我的 BasicDataSource 配置是
MinIdle = "8"
MaxIdle = "16"
MaxTotal = "-1"
maxOpenPreparedStatements = "256"
RemoveAbandonedTimeout = "300"
RemoveAbandonedOnBorrow = "true"
并且输出空闲连接数始终为 0,并且无论我等待连接空闲多长时间,活动连接都会继续增加。
那么在什么情况下连接会变成"idle"?我找不到任何超时设置来强制连接空闲。
任何见解将不胜感激!
我不确定您是否正在关闭连接对象。一旦您关闭连接对象,活动连接将减少,空闲连接将增加。
当您执行 "ds.getConnection()" 时,将创建一个连接(对象)或检索并返回一个已关闭的已创建连接(对象)。收到的连接对象被认为是活动的,直到关闭被调用。准备好被重用的已关闭连接对象是空闲连接。