2017-09-06 8 views
0

@Transactional@Retryable(value = StaleStateException.class) method foo() 끝에 CustomEvent를 게시 할 때 처리 방법은 무엇입니까?@TransactionalEventListener, @ Transactional 및 @Retryable flow

내가 방법을 실행 한 후 커밋하는 동안 StaleStateException를 얻을 경우, @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)가 호출되지 않고 @Retryable으로 봄이 foo()초 시간을 호출합니다. 그리고이 경우 처음으로 CustomEvent의 수명주기는 무엇입니까? 청소 될까요? 또는 foo()의 두 번째 성공 통화 이후에 @TransactionalEventListener()이 두 번 호출됩니까?

답변

0

누군가가 같은 걱정을하는 경우, 응답은 TransactionalEventListener에서 수신 한 이벤트가 트랜잭션 시간에만 유효하다는 것입니다. RetryTemplate은 @Retryable 메서드의 모든 호출에 대해 새 트랜잭션을 생성하므로 성공적인 시도의 이벤트 만 @TransactionalEventListener에 도착합니다.