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"
そして、出力はアイドル接続番号であり、接続がアイドルになるのをどれだけ待っても、アクティブな接続は常に増加し続けます。
では、どのような状態で接続が「アイドル」になるのでしょうか? 接続を強制的にアイドル状態にするタイムアウト設定が見つかりません。
どんな洞察も大歓迎です!