Как я могу установить тайм-аут для вызова Hibernate save () с серверной частью MySQL?

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

Ничто из этого не похоже на то, что я хочу сделать (кроме, возможно, JPA 2). Кажется, это должно быть очень просто. Что-то мне здесь не хватает?

Спасибо!

7
задан Brent Writes Code 16 August 2011 в 16:43
поделиться