JPA (и/или Hibernate) - Как установить порог времени ожидания для соединения и/или запроса?


Я пытаюсь выяснить, как настроить мой проект таким образом, что JPA будет тайм-аут и выдаст исключение после заданного количества времени. Есть две ситуации, когда я хотел бы, чтобы это произошло:

  • Когда JPA не может даже подключиться к базе данных
  • Когда запрос JPA занимает больше времени, чем пороговое время ожидания для возврата результирующего набора

Я не уверен, могут ли эти два сценария быть настроены отдельно (другой порог времени ожидания для каждого), или если один порог используется для обоих.

Мой проект в настоящее время настроен следующим образом:

  • Кодирование по спецификации JPA 2.0
  • Использование Hibernate 3.5.6 в качестве реализации JPA
  • использование пула соединений c3p0 с Hibernate
  • использование файла конфигурации persistence.xml (использование значений свойств, специфичных для гибернации, только при необходимости)
  • не с использованием каких-либо файлов конфигурации для гибернации
3 3

3 ответа:

Свойство персистентности JPA2 " javax.стойкость.запрос.timeout " позволяет установить время ожидания для запроса (при условии, что базовый драйвер JDBC поддерживает его).

На этой странице Hibernate wiki подробно описано, как настроить пул соединений c3p0, включая параметры таймаута.

Обратите внимание, что эти сведения на самом деле не имеют большого отношения к JPA или Hibernate, но являются настройками, которые вы устанавливаете на самом соединении DataSource / database (в данном случае c3p0).

Вы должны установить как клиент Java, так и сервер базы данных по умолчанию таймауты: Если вы использовали Spring, используйте @Transactional (timeout=10), который в конечном итоге устанавливает preparedStatement.setQueryTimeout () подсказка, чтобы закрыть транзакцию в течение 10 секунд. Также, чтобы сервер по тайм-ауту чуть выше ожидания клиента "Java-клиент пользователя" тайм-аут, скажем, в 15 с: https://mariadb.com/kb/en/mariadb/query-limits-and-timeouts/