개발 일지

Spring TransactionEventListener

북극곰은콜라 2022. 11. 23. 22:30
반응형


개요

Event 기반 구조로 개발을 할 때 가용할만한 기능


@EventListener

  • Spring에서 제공하는 EventListener
  • 이벤트를 publish하고, @EventListener 가 달린 메소드에서 자신의 condition에 맞는 이벤트일 시 수행한다.

@TransactionalEventListener

  • 기본적으로 event를 publishing하면 비동기로 이벤트가 발행된다.
  • 주요 로직에서 이벤트 발행 후 오류가 발견되어 rollback이 필요할 시 이미 발행된 Event에 대해서는 rollback이 불가하다.
  • 따라서 Transaction이 필요한 로직에서는 Event가 발행되지 않거나 실행이 안되어야한다.

원리

  • @Transaction에 종속적인 eventListener이다.
  • 이벤트를 발행하는 주체의 Transaction 정보를 가져와서 성공한 경우에만 이벤트를 처리한다.

성공.log

2021-08-22 22:34:28.268  INFO 13835 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 메서드 시작
2021-08-22 22:34:28.355  INFO 13835 --- [    Test worker] c.p.a.api.game.service.EventTestService  : reviewRepositoryV1 저장
2021-08-22 22:34:28.356  INFO 13835 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 이벤트 발생 요청
2021-08-22 22:34:28.359  INFO 13835 --- [    Test worker] c.p.a.api.game.service.EventTestService  : userRepositoryV1 저장
2021-08-22 22:34:28.359  INFO 13835 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 메서드 종료
2021-08-22 22:34:28.378  INFO 13835 --- [    Test worker] p.a.a.g.s.TransactionalEventTestListener : TransactionalEventListener 이벤트 마무리

실패.log

2021-08-22 22:36:15.959  INFO 13944 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 메서드 시작
2021-08-22 22:36:16.048  INFO 13944 --- [    Test worker] c.p.a.api.game.service.EventTestService  : reviewRepositoryV1 저장
2021-08-22 22:36:16.049  INFO 13944 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 이벤트 발생 요청
2021-08-22 22:36:16.050  INFO 13944 --- [    Test worker] c.p.a.api.game.service.EventTestService  : 에러 발생
java.lang.RuntimeException: exception

 

// @Transaction에 종속적이기 때문에, 발행하는 주체가 Transaction이 없는 경우 실행되지 않음

옵션

  • AFTER_COMMIT (기본값) - 트랜잭션이 성공적으로 마무리(commit)됬을 때 이벤트 실행
  • AFTER_ROLLBACK – 트랜잭션이 rollback 됬을 때 이벤트 실행
  • AFTER_COMPLETION – 트랜잭션이 마무리 됬을 때(commit or rollback) 이벤트 실행
  • BEFORE_COMMIT - 트랜잭션의 커밋 전에 이벤트 실행

Reference

 - https://sabarada.tistory.com/188

 

 

반응형

'개발 일지' 카테고리의 다른 글

자동화 공격이란  (0) 2022.11.25
DID 란  (0) 2022.11.25
Spring boot With Embedded Tomcat  (0) 2022.11.23
MDC 란  (0) 2022.11.23
QuerydslPredicate 란  (0) 2022.11.23