Отключение всех соединений в пуле

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2015

Использую com.mchange.v2.c3p0.ComboPooledDataSource, установлено максимальное количество соединений - 60. Изначально было меньше, но увеличение не помогает решению проблемы. Все параметры указаны, но когда количество соединений резко доходит до 60, к примеру за одну минуту, после этого они остаются занятыми и не освобождаются, новые также не создаются. Вопрос в том, как можно сделать так, чтобы, если достигнуто 60 соединений, он хотя бы закрывал те соединения, которым уже 30 секунд. Я использую

if(cpds.getNumUnclosedOrphanedConnections() == 59){
    cpds.softResetAllUsers();
}

но он слишком жестко работает, закрывает все соединения

ComboPooledDataSource  cpds = new ComboPooledDataSource();
cpds.setDriverClass(driverClassName);          // Класс драйвера базы
cpds.setJdbcUrl(url);                          // JDBC - урл
cpds.setUser(username);                        // Пользователь
cpds.setPassword(password);                    // Пароль
cpds.setMaxPoolSize(maxPoolSize);              // Максимальный размер пула

cpds.setInitialPoolSize(3);                    // Размер пула при инициализации
cpds.setMinPoolSize(3);                        // Минимальный размер пула

cpds.setPreferredTestQuery("SELECT 1 FROM DUAL");        // Запрос для теста соединения
cpds.setIdleConnectionTestPeriod(60);          // Период проверки ожидающих соединений (сек.)
cpds.setMaxIdleTime(20 * 60);                  // Таймаут ожидающего соединения (сек.)
cpds.setUnreturnedConnectionTimeout(5 * 60);   // Таймаут соединения, которое не было возвращено в пул (сек.)
cpds.setMaxIdleTimeExcessConnections(30 * 60); // Промежуток времени в течение которого проверяется пул,
// и сокращается кол-во соединений в нем в случае неиспользования их (сек.)

Ответы

▲ 1

Хотел блин поковыряться в неизвестном языке.. но тут без описания кто к чему :)) но много методов Get с различными вариантами статусов пользователей т.е. соединений :) http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/ComboPooledDataSource.html

Там можно получить их номера и сделать softReset(по пользователю)