DevBoi

[DDD] EventListener, TransactionalEventListener? 본문

Develop/[DDD]

[DDD] EventListener, TransactionalEventListener?

HiSmith 2023. 6. 19. 19:18
반응형

비슷하면서도,,, 느낌이 오면서도.,,,, 무튼 다른,, 그런 두가지 어노테이션을 공부해보려고한다.

@TransactionalEventListener는 해당 쓰레드가 언제 트랜잭션을 처리할지, Phase를 통해서 정의할 수 있다.

 

@EventListener는 호출시점에 바로 실행된다.

트랜잭셔널이벤트리스너는, 아래와 같이 4가지 Phase를 나눠서 등록이 가능하다.

@Component
class MemberEventHandler {
 
    @EventListener
    fun defaultEventListener(event : MemberSave){
        logger.info("defaultEventListener ---> {}", event)
    }
 
    @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
    fun transactionalEventListenerBeforeCommit(event : MemberSave){
        logger.info("TransactionPhase.BEFORE_COMMIT ---> {}", event)
    }
 
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    fun transactionalEventListenerAfterCommit(event : MemberSave){
        logger.info("TransactionPhase.AFTER_COMMIT ---> {}", event)
    }
 
    @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)
    fun transactionalEventListenerAfterRollback(event : MemberSave){
        logger.info("TransactionPhase.AFTER_ROLLBACK ---> {}", event)
    }
 
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMPLETION)
    fun transactionalEventListenerAfterCompletion(event : MemberSave){
        logger.info("TransactionPhase.AFTER_COMPLETION ---> {}", event)
    }
 
}

 

 

이벤트 리스너는 바로 실행이 되지만

TransactionalEventListener는 상위 트랜잭션이 커밋,완료,롤백,비포커밋에 나눠서 설정이 가능하고

해당 설정을 하는것에 따라 실행시점이 달라진다.

 

해당 분기 처리된 메소드로 오버로딩으로 구현할 수도있고, 필요한 것만 정의해서 사용할 수도 있다.

 

뭔가 이번껀 굳이 하고싶지는 않다..할게많아서 귀찮다.

 

 

무튼 트랜잭셔널과 같이 이벤트리스너에 대한 트랜잭션 옵션도 가능하다고 알고있자.

반응형