У меня есть приложение, в котором соединение DB создается конфигурацией Spring (затем переходит в спящий режим). Ниже приведены параметры по умолчанию в нашем весеннем файле.Соединение с пружиной DBCP завершается
<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>${dbUrl}</value>
</property>
<property name="username">
<value>${dbUser}</value>
</property>
<property name="password">
<value>${dbPassword}</value>
</property>
</bean>
Однако в определенной среде соединения Oracle DB закрываются сетевыми настройками через определенный промежуток времени. Первоначально мы думали, что закрытие соединений связано с отсутствием соединений. Мы добавили validationQuery, чтобы периодически отправлять запрос на сервер, чтобы соединения не были простаивают.
<bean id="localDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${database.driver}</value>
</property>
<property name="url">
<value>$dbUrl</value>
</property>
<property name="username">
<value>$dbUser</value>
</property>
<property name="password">
<value>$dbPassword</value>
</property>
<property name="validationQuery">
<value>SELECT 1 FROM dual</value>
</property>
<property name="testWhileIdle">
<value>true</value>
</property>
<property name="testOnReturn">
<value>true</value>
</property>
<property name="timeBetweenEvictionRunsMillis">
<value>1000</value>
</property>
</bean>
- Даже после того, как выше настройки соединения по-прежнему получать закрыты.
- Также отмечено, что, когда приложение простаивает в течение 2-3 (разных) часов, запрос проверки прекращает выполнение на сервере, а затем соединения закрываются по сетевым настройкам.
Мой вопрос заключается в добавлении validationQuery гарантирует, что соединения не простаивают? Приложение не работает при первой попытке входа в систему, не вызывая никакого соединения с БД; но работает после 2-3 попыток. Не уверен, что здесь происходит.
Спасибо за помощь мне понять validationQuery. Для # 2 в моем вопросе это было фактически minEvictableIdleTimeMillis, заставляющее validationQuery не запускаться. – dRv