#hibernate #spring #jboss #database-connection
#переход в спящий режим #spring #jboss #подключение к базе данных
Вопрос:
Мы используем Spring Hibernate на сервере приложений Jboss. Мы использовали объединение пулов соединений Jboss для всех наших потребностей в объединении пулов приложений, используя * -ds.xml файл выглядит следующим образом
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>dev_1</user-name>
<password>*********</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>15</max-pool-size> // production system has more than 80 connections
<idle-timeout-minutes>1</idle-timeout-minutes>
В последнее время мы наблюдаем повторяющиеся исключения «Сброс соединения» и «Нет управляемых подключений».
Мы используем управление транзакциями Spring, поэтому мы вручную не закрываем ни одно соединение. Необходимо ли закрывать соединения вручную или мы должны отказаться от объединения пулов соединений Jboss и использовать механизм объединения пулов соединений c3po или мы можем использовать их оба вместе.
Наши свойства гибернации в Sessionfactory…
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
<prop key="hibernate.jdbc.batch_size">0</prop>
<prop key="hibernate.jdbc.factory_class">net.bull.javamelody.HibernateBatcherFactory</prop>
<prop key="hibernate.use_streams_for_binary">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.query_cache_factory">com.cisco.ipcentral.hibernate.cache.StandardQueryCacheFactory</prop>
<!-- applicationContext hibernateProperties merge-point -->
</props>
</property>
Ответ №1:
Я не знаком с «пулом соединений JBoss», но похоже, что у вас есть соединения, время ожидания которых истекло или которые отключаются брандмауэром, пока они находятся в пуле. Большинство пулов соединений позволяют задать «запрос проверки», который будет выполняться до передачи соединения, чтобы убедиться, что соединение все еще работает. Использование этого приведет к тому, что пул удалит мертвые соединения, прежде чем они могут быть переданы вашему приложению для использования.
Обновление: может быть, вы ищете <check-valid-connection-sql>
?