Hibernate занимает 10 минут, чтобы вызвать исключение, когда база данных не работает - PullRequest
1 голос
/ 23 октября 2009

Я использую Spring + Hibernate 3 + C3P0. При запуске, если база данных не работает, исключение выдается примерно через 10 минут. До этого программа блокируется ... Я не включаю Spring xml, конфигурацию гибернации и т. Д., Поскольку это довольно распространенная проблема, и если решение существует, оно должно быть стандартным простым способом. Если нет, я могу обрезать важный код и конфигурацию и вставить его здесь. Кто-нибудь знает что-нибудь об этом? Заранее спасибо.


Для уточнения:

Что мне по сути нужно, так это узнать, есть ли оболочка в c3p0, hibernate или даже spring вокруг функции DriverManager.setLoginTimeout (). Или функция, которая предлагает мне эту функциональность. Обертка может быть через настройки или что-то. Я просто хочу получить исключение, если я не подключился к источнику данных в течение X секунд, независимо от причины (сокет, база данных, плохая погода). И я хочу найти место для установки этого X. Что еще хуже, драйвер Oracle, который является драйвером, который я использую, не реализует setLoginTimeout (), поэтому я не могу использовать его напрямую. Я пришел к выводу, что нет способа решить эту проблему, кроме как вручную создать собственный поток таймера. Кто-нибудь может проверить вышеуказанную ситуацию? Большое спасибо.

1 Ответ

1 голос
/ 23 октября 2009

Скорее всего, это не связано с Hibernate / Spring как таковым; пул соединений с базой данных отвечает за работу с соединениями.

  1. Каковы ваши настройки C3P0?
  2. Какую базу данных / драйвер вы используете? Существуют ли какие-либо специфичные для драйвера настройки, заставляющие сам драйвер ждать / повторять попытки, прежде чем сообщить об ошибке?
  3. Означает ли "отключение базы данных" как "полное отключение"? Или это может быть вызвано каким-то тайм-аутом сокета?

Обновление (на основании пояснения к ОП ниже):

DriverManager.setLoginTimeout() не используется драйвером оракула. OracleDataSource имеет собственную настройку loginTimeout .

...