У меня есть приложение Spring / JPA / Hibernate, и есть фрагмент кода, который каждую минуту вызывается кварцевым заданием для отправки некоторых уведомлений.
@Transactional
public void sendNotifications(){
Set<MyEntity> entitySet = getDAO().findEntitiesToNotify();
for (MyEntity e : entitySet) {
sendEntityNotificationEmail(e);
e.setNotification(true);
this.merge(e);
}
return false;
}
Это прекрасно работает большую часть времени.Ключевая фраза «большую часть времени», потому что время от времени эта транзакция не обновляет базу данных, поэтому электронное письмо с уведомлением отправляется каждую минуту, пока я не отправлюсь вручную и не уничтожу кварцевое задание или не обновлю базу данных.В журналах нет ошибок, и база данных не обновляется.Кто-нибудь имеет представление о том, что может быть проблема?Или каким-либо образом я могу отладить эту проблему.Есть ли какое-то состояние гонки, потому что этот метод вызывается каждую минуту, поэтому новый поток снова вызывает ту же задачу, в то время как другой обрабатывает ее, и поэтому изменение не сохраняется?