Почему 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()", соединение (объект) создается или уже созданное соединение (объект), которое закрыто, извлекается и затем возвращается. Полученный объект подключения считается активным до вызова закрытия. Объекты закрытых соединений, готовые к повторному использованию, являются незанятыми соединениями.

Другие вопросы по тегам