Закрытие неактивных сеансов с использованием BasicDataSource

#java #oracle #jdbc

#java — язык #Oracle #jdbc #java

Вопрос:

В нашей базе данных разработки Oracle 11g R2 мы заметили, что соединения, открытые через наше Java-приложение с использованием BasicDataSource, остаются открытыми неопределенно долго. В идеале мы хотели бы, чтобы у каждого экземпляра приложения было до 5 одновременных сеансов базы данных, однако, если сеанс неактивен более 60 секунд, сеанс следует закрыть, чтобы уменьшить нагрузку на память базы данных.

Используя следующий код для настройки нашего BasicDataSource, я могу заметить, что мы остаемся под потолком 5 сеансов базы данных, но, похоже, мы никогда не очищаем неактивные сеансы:

 BasicDataSource ds = new BasicDataSource();
ds.setUrl(getUrlAsString());
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");        
ds.setUsername(getClientOracleUserAsString());              
ds.setPassword(getClientOraclePasswordAsString());
ds.setMinIdle(0);
ds.setMaxIdle(5);
ds.setMinEvictableIdleTimeMillis(60000);
  

Комментарии:

1. Установка maxIdle в 0 не обеспечивает желаемого поведения? (т. Е. Не учитывает minEvictableIdleTimeMillis?)

Ответ №1:

Попробуйте установить следующее:

 //Sets the number of connections tested during the eviction process*
numTestsPerEvictionRun=5

//Sets whether idle object evictor will validate connections*
setTestWhileIdle=true

//Sets the validation query to run to validate a connection*
setValidationQuery=SELECT 1
  

Также может быть, что вы неправильно закрываете соединения на прикладном уровне.