#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
Также может быть, что вы неправильно закрываете соединения на прикладном уровне.