На прошлой неделе мы столкнулись с проблемой в большой системе на основе Hibernate на Java.Наша внутренняя база данных MySQL (размещенная на Amazon RDS) не отвечала на запросы в течение 5-10 минут (она по-прежнему принимала соединения, но из-за проблем с оборудованием пропускная способность записи упала до нуля).Этот кусок кода:
getSession().save(entity); //session is an instance of org.hibernate.Session
Зависает до 8,5 минут.Очевидно, что в этом утверждении необходимо какое-то условие тайм-аута, чтобы оно не сработало в случае моего конкретного сценария.Я не могу гарантировать, что в будущем подобной проблемы с оборудованием я не увижу.
Я должен отметить, что я все еще довольно плохо знаком с Hibernate, поэтому возможно, что я просто не понимаю некоторые вещинапример, связь между использованием save()
и критериями, транзакциями и т. д. Итак, я обнаружил следующее:
hibernate.c3p0.timeout
можно использовать для установки тайм-аутов соединения в пуле соединений C3P0 getSession().getTransaction().setTimeout(...)
может использоваться для тайм-аута транзакции getSession().createQuery(...).setTimeout(...)
может использоваться для тайм-аута запроса - Я видел JPA 2
javax.persistence.query.timeout
, но я 'я не совсем уверен, что это то, что я хочу (я также не думаю, что моя версия Hibernate достаточно новая)
Ничто из этого не похоже на то, что я хочу сделать (кроме, может быть, JPA 2),Кажется, это должно быть очень просто.Я что-то здесь упускаю?
Спасибо!