@TransactionalEventListener, @Transactional и @Retryable flow

Когда я публикую CustomEvent в конце @Transactional и @Retryable(value = StaleStateException.class) method foo(), как он обрабатывается?

Если я получаю StaleStateException во время фиксации после выполнения метода, то @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) не будет вызываться и к @Retryable Spring вызовет foo() второй раз. И каков в этом случае жизненный цикл первого CustomEvent? Будет ли это убрано? Или после второго успешного вызова _8 _, _ 9_ будет вызываться дважды?


person Starkom    schedule 06.09.2017    source источник


Ответы (1)


Если кто-то столкнется с таким же беспокойством, ответ будет заключаться в том, что события, прослушиваемые TransactionalEventListener, действуют только во время транзакции. RetryTemplate создает новую транзакцию для каждого вызова метода @Retryable, поэтому в @TransactionalEventListener будут поступать только события успешной попытки.

person Starkom    schedule 08.09.2017