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);
}
}
출처