1. Transaction-bound Events
Event
- 트랜잭션 경계 내에서 발생하는 이벤트
- 트랜잭션 상태에 따라 분리된 작업 실행 (후처리 작업 또는 알림 처리 등)
- 커스터마이징 가능
예제) OrderCreatedEvent
더보기
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));
}
}
@TransactionalEventListener
- Spring에서는 트랜잭션의 상태에 맞춰 작업을 처리할 수 있음
- 이벤트 리스너가 호출되도록 설정
Phase | 설명 | 실행 시점 |
BEFORE_COMMIT | 트랜잭션이 커밋되기 직전 |
커밋 이전 실행 (롤백 시 실행 안됨)
|
AFTER_COMMIT | 트랜잭션이 정상적으로 커밋된 후 |
커밋 성공 후 실행
|
AFTER_ROLLBACK | 트랜잭션이 롤백된 후 | 롤백 이후 실행 |
AFTER_COMPLETION | 트랜잭션이 종료된 후 (커밋 or 롤백 관계없이) |
모든 트랜잭션 종료 시점에 실행
|
예제) 이벤트 리스너
더보기
@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);
}
}
출처