@TransactionalEventListener, @Transactional и @Retryable flow
Когда я опубликую CustomEvent в конце @Transactional
а также @Retryable(value = StaleStateException.class) method foo()
как это обрабатывается?
Если я получу StaleStateException
во время принятия после выполнения метода, затем @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
не позвонил и по @Retryable
Весна позвонит foo()
второй раз. И каков жизненный цикл первого CustomEvent
в этом случае? Это будет убрано? Или после второго успешного вызова foo()
,@TransactionalEventListener()
будет вызываться дважды?
1 ответ
Если кто-то встретит то же самое беспокойство, ответ таков: события, прослушиваемые TransactionalEventListener, являются активными только во время транзакции. RetryTemplate создает новую транзакцию для каждого вызова метода @Retryable, поэтому в @TransactionalEventListener будут поступать только события из успешной попытки.