ПрограммированиеJavaSpring Framework
Готовим следующую карточку…
С подвохомСредняя
Вопрос

После создания заказа нужно отправить письмо только если транзакция успешно зафиксирована. Что произойдёт с обработчиком при откате и при успешном commit, а также в какой транзакционной фазе он запускается по умолчанию?

@Service
class OrderService {
  @Transactional
  void create() {
    publisher.publishEvent(new OrderCreated(42L));
    throw new IllegalStateException("rollback");
  }
}

@Component
class MailNotifier {
  @TransactionalEventListener
  void send(OrderCreated event) {
    mail.send(event.orderId());
  }
}

record OrderCreated(Long orderId) {}

Смахните карточку влево, чтобы повысить рейтинг, или вправо, чтобы понизить.