Восстановить связь Hibernate - PullRequest
6 голосов
/ 18 января 2011

Кто-нибудь знает способ восстановить / повторить снова спящий режим. Я имею в виду, например: удаленная БД не работает, и я запускаю свое приложение. Hibernate не может установить соединение. это терпит неудачу. Но приложение не закрыто. Есть ли способ сказать hibernate, чтобы попытаться еще раз установить соединение?

Заранее спасибо

Ответы [ 3 ]

18 голосов
/ 07 февраля 2011

Вы действительно должны пойти на пул соединений C3P0: http://www.mchange.com/projects/c3p0/index.html#hibernate-specific

В документации по C3P0 есть раздел на эту тему: http://www.mchange.com/projects/c3p0/index.html#configuring_recovery

Сначала вы должны правильно настроить c3p0, которыйв случае использования hibernate должен произойти в файле c3p0.properties.

В ваших c3p0.properties поместите эти свойства для повторной попытки повторного подключения каждые 3 секунды, когда база данных не работает:

c3p0.acquireRetryAttempts = 0
c3p0.acquireRetryDelay = 3000
c3p0.breakAfterAcquireFailure = false

Также, чтобы избежать разрыва соединений, лежащих в вашем пуле на неопределенный срок, используйте управление возрастом соединений:

c3p0.maxConnectionAge = 6000
c3p0.maxIdleTime = 6000
c3p0.maxIdleTimeExcessConnections = 1800
c3p0.idleConnectionTestPeriod = 3600

Это может быть довольно дорого, но полезно, если вышеуказанного недостаточно:

c3p0.testConnectionOnCheckout = true
c3p0.preferredTestQuery = SELECT 1;

Вы можететакже хотите проверить наличие утечек соединения, которые препятствуют восстановлению:

c3p0.debugUnreturnedConnectionStackTraces = true

И, наконец, убедитесь, что C3P0 правильно подключен к Hibernate, включите ведение журнала отладки для пакета "com.mchange" и посмотрите, сообщает ли C3P0 что-нибудь.о себе.Он должен указывать свойства конфигурации, которые загружены, поэтому посмотрите, все ли там.

Надеюсь, это поможет.

1 голос
/ 18 января 2011

C3P0 - реализация внутреннего пула соединений для спящего режима.

Добавить «hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider» в файле свойств гибернации.Создайте файл c3p0.properties с соответствующей настройкой параметров.Этот файл & c3p0-x.jar должен находиться в classpath.

c3p0.properties

  • c3p0.idleConnectionTestPeriod :Если это число больше 0, c3p0 будет проверять все незанятые, объединенные в пул, но не проверенные соединения, каждое это количество секунд.

  • c3p0.testConnectionOnCheckout :Используйте только при необходимости.Дорого.Если это правда, операция будет выполняться при каждой проверке соединения, чтобы убедиться, что соединение действительно.Лучший выбор: периодически проверять соединения, используя idleConnectionTestPeriod.

Существует несколько других свойств, которые можно настроить в hibernate.properties & c3p0.properties.

0 голосов
/ 28 ноября 2013

Возможно, вы пытаетесь вызвать метод .getCurrentSession () вместо .openSession () ?

Если соединение падает, вы должны установить новое.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...