На прошлой неделе мы столкнулись с проблемой в большой системе, основанной на Java и Hibernate. Наша внутренняя база данных 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 (...)
может использоваться для тайм-аута запроса javax.persistence.query.timeout
, но я не совсем уверен, что я хочу (я также не думаю, что мой Версия Hibernate достаточно новая) Ничто из этого не похоже на то, что я хочу сделать (кроме, возможно, JPA 2). Кажется, это должно быть очень просто. Что-то мне здесь не хватает?
Спасибо!