-
Event Publisher / Event ListenerSpring 2023. 7. 4. 03:24
사용 이유: 의존성 줄이기 위함
Spring Event 구성
- Event Class
- Event Publisher
- Event Listener
Event Class
public class OrderedEvent { private String productName; public OrderedEvent(String productName) { this.productName = productName; } public String getProductName() { return productName; } }
Event Publisher
@Slf4j @Service public class OrderService { ApplicationEventPublisher publisher; public OrderService(ApplicationEventPublisher applicationEventPublisher) { this.publisher = applicationEventPublisher; } public void order(String productName) { //주문 처리 log.info(String.format("주문 로직 처리 [상품명 : %s]", productName)); publisher.publishEvent(new OrderedEvent(productName)); } }
- ApplicationEventPublisher 의존성 주입
- publishEvent() 를 통해 생성된 이벤트 객체 넣어줌
Event Listener
@Slf4j @Component public class OrderedEventListener { @EventListener public void sendPush(OrderedEvent event) throws InterruptedException { log.info(String.format("푸시 메세지 발송 [상품명 : %s]", event.getProductName())); } @EventListener public void sendMail(OrderedEvent event) throws InterruptedException { log.info(String.format("메일 전송 [상품명 : %s]", event.getProductName())); } }
- @EventListener를 통해 발생하는 이벤트 캐치 가능
🕊️ @EventListener vs @TransactionalEventListener
@EventListener는 호출 시점에 바로 실행됨 => 결과에 상관없이 호출되는 시점에 바로 진행됨
@TransactionalEventListener는 트랜잭션이 커밋이나 롤백되는 시점에 이벤트가 실행
👉 동작하는 메서드를 트랜잭션으로 묶어서 처리하는 경우 트랜잭션의 상태에 따라 발생하는 이벤트를 처리해주는 이벤트 리스너이기 때문에 이벤트 처리가 필요한 로직에서 트랜잭션을 적용해야 하는 경우 사용
spring 이벤트 사용하기(event publisher, event listener) (tistory.com)
Spring Event, @TransactionalEventListener 사용하기 (tistory.com)
'Spring' 카테고리의 다른 글
Github Actions + Git Submodule로 application.yml 관리하기 (0) 2024.04.10 [Spring Security] kakao 소셜 로그인 (0) 2023.11.21 [Test Code] @NotBlank 테스트 코드 작성 방법 (0) 2023.07.03 SecurityConfig - SecurityFilterChain (0) 2022.11.13 [Querydsl] BooleanBuilder과 BooleanExpression (0) 2022.08.26