Spring/Spring

[Spring][Data Access] 1-7. Transaction Manager: Transaction-bound Events

noahkim_ 2024. 8. 11. 11:49

1. Transaction-bound Events

event

  • 커스텀 이벤트
  • 트랜잭션 경계 내에서 발생
더보기

이벤트 객체

public class OrderCreatedEvent {

    private final Order order;

    public OrderCreatedEvent(Order order) {
        this.order = order;
    }

    public Order getOrder() {
        return order;
    }
}

 

더보기

이벤트 발행

@Service
@RequiredArgsConstructor
public class OrderService {

    private final ApplicationEventPublisher eventPublisher;

    @Transactional
    public void createOrder(Order order) {
        System.out.println("Order created: " + order);

        // 주문이 생성된 후 이벤트를 등록(게시)
        eventPublisher.publishEvent(new OrderCreatedEvent(order));
    }
}

 

phase
  • BEFORE_COMMIT: 트랜잭션이 커밋되기 직전
  • AFTER_COMMIT: 트랜잭션이 커밋된 후
  • AFTER_ROLLBACK: 트랜잭션이 롤백된 후
  • AFTER_COMPLETION: 트랜잭션이 완료된 후 (커밋/롤백 상관 X)

 

@TransactionalEventListener

  • Spring에서는 트랜잭션의 특정 단계에 맞춰 이벤트 리스너가 호출되도록 설정할 수 있음
@Component
public class EmailNotificationListener {

    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void handleOrderCreatedEvent(OrderCreatedEvent event) {
        Order order = event.getOrder();
        // 이메일 보내기 로직
        System.out.println("Sending email notification for order: " + order);
    }
}

 

 

 

출처