2017-09-06 19 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。