
@TransactionalEventListener는 왜 조용히 무시될까
두줄요약
`@TransactionalEventListener`는 커밋 이후 실행이 아니라 트랜잭션이 있을 때만 등록됩니다. 트랜잭션 밖 발행 누락은 `fallbackExecution`과 발행 지점의 트랜잭션 검사를 성격에 맞게 선택해야 합니다.
문제 상황
@TransactionalEventListener사용 시 이벤트가 예외 없이 조용히 사라지는 현상- 저장 경로에 따라 색인 갱신 리스너가 실행되기도 하고 누락되기도 하는 차이
원인 분석
커밋 이후 실행이 아니라활성 트랜잭션이 있을 때만 등록되는 계약- 트랜잭션 밖에서 이벤트를 발행하면 리스너가 등록되지 않고 무시됨
해결 방법
- 멱등한 부수효과에는
fallbackExecution = true로 트랜잭션 밖 경로도 즉시 실행 - 커밋 상태에 의존하는 리스너는 발행 지점에서 트랜잭션 활성 여부를 검사해 위반을 조기 노출




