JPA (и / или Hibernate) - Как установить порог тайм-аута для соединения и / или запроса? - PullRequest
3 голосов
/ 05 октября 2010

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 05 октября 2010

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

1 голос
/ 31 марта 2016

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

0 голосов
/ 05 октября 2010

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

Обратите внимание, что этот тип деталей на самом деле не имеет ничего общего с JPA или Hibernate, но это настройки, которые вы устанавливаете для самого соединения с источником данных / базой данных (в данном случае c3p0).

...