사용자 도구

사이트 도구


springframework:transaction:transactional_event_listener

TransactionalEventListener

  • Spring Transaction 의 상태에 따라 발생하는 이벤트를 처리해주는 이벤트 리스너.
  • Spring 4.2 이상 버전에서 가능.
  • 트랜잭션이 관련 있을 경우에는 @EventListener가 아니라 @TransactionalEventListener를 사용해야 한다. @EventListener 는 트랜잭션 범위 내에서 동기적으로 실행되고, @TransactionalEventListener는 커밋 전/후 등을 자유롭게 지정할 수 있다.

HowTo

  • 트랜잭션 범위 내에서 ApplicationEventPublisher 를 사용해서 아무 이벤트 객체나 이벤트로 발행
  • @TransactionalEventListner 애노테이션이 걸린 메소그의 인자로 해당 이벤트 객체를 받아서 처리.
  • @TransactionalEventListner 의 설정에 따라서 이벤트 핸들러 호출이 커밋 전,후 등에 됨을 보장받을 수 있음.
  • 트랜잭션이 없다면 작동하지 않는다. 단, fallbackExecution가 설정돼 있으면 작동한다.
  • event handler 메소드에 @Async를 걸면 비동기로 실행할 수 있다. Spring @Async

주의 사항

  • AFTER_COMMIT phase 에서 JPA Entity에 수정을 가해봐야 반영이 안 된다. 이미 커밋했으니까.
  • BEFORE_COMMIT phase 에서 뭔가를 할 때는 @Async를 사용하지 말 것.
  • '“@Async''를 걸지 않으면 이벤트 처리를 마칠 때 까지 DB 커넥션을 놓치 않게 된다.

참조

springframework/transaction/transactional_event_listener.txt · 마지막으로 수정됨: 2019/03/26 19:27 저자 kwon37xi