2017-09-06 477 views
0

当我在@Transactional@Retryable(value = StaleStateException.class) method foo()的末尾发布CustomEvent时,它是如何处理的?@TransactionalEventListener,@Transactional和@Retryable流程

如果我在方法执行后提交期间得到StaleStateException,那么@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)将不会调用,而@Retryable Spring将第二次调用foo()。在这种情况下,第一个CustomEvent的生命周期是什么?它会被清理吗?或者在第二次成功拨打foo()后,@TransactionalEventListener()会被调用两次?

回答

0

如果有人会遇到同样的担心,答案是由TransactionalEventListener监听的事件仅存在于事务时间。 RetryTemplate为每次调用@Retryable方法创建一个新的事务,所以只有成功尝试的事件才会到达@TransactionalEventListener。