Есть метод, которые вызывается после коммита сущности, то есть использую AfterCommit.
Если во время вызова этого метода возникает какой-то Exception, то объект для которого вызывался этот метод не сохраняется, хотя заявлено, что обработка изменений после коммита, вызывается в другой транзакции и по факту не должно влиять на сохранение.
Мне нужно, чтобы объект сохранялся в базе данных, если даже возникает какой-то Exception.
Только что попробовал сделать примитивный листенер, типа такого:
@Component
public class SchoolEventListener {
@TransactionalEventListener
public void onSchoolChangedAfterCommit(EntityChangedEvent<School> event) {
throw new RuntimeException("Exception from the listener");
}
}
Эксепшн из этого листенера никак не мешает сохранению объекта. У вас точно эксепшн возникает в after commit слушателе?
Мне нужно отлавливать Exception в handler и выдавать сообщение на уровне UI, но при использование аннотации @TransactionalEventListener Exception почему-то не отлавливается в handler
To handle EntityChangedEvent after the changes are saved to the database and the transaction is committed, create a bean method annotated with @TransactionalEventListener.
Note that exceptions occurred in an “after commit” event listener are not propagated to the calling code and not logged. So it is recommended to wrap your code in the try-catch clause.