Почему DBCP getNumIdle всегда возвращает 0? Когда активное соединение становится свободным?
Я использую 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, и активное соединение продолжает увеличиваться независимо от того, как долго я жду, пока соединение не станет свободным.
Итак, в каком состоянии соединение станет "бездействующим"? Я не могу найти настройки тайм-аута, чтобы принудительно установить соединение.
Любые идеи будут высоко оценены!
0 ответов
Я не уверен, закрываете ли вы объект подключения. Как только вы закроете объект подключения, количество активных подключений уменьшится, а количество неактивных подключений увеличится.
Когда вы выполняете "ds.getConnection()", соединение (объект) создается или уже созданное соединение (объект), которое закрыто, извлекается и затем возвращается. Полученный объект подключения считается активным до вызова закрытия. Объекты закрытых соединений, готовые к повторному использованию, являются незанятыми соединениями.