Как работает транзакционный контекст при использовании Spring Events?

Senior
224 просмотров
AFK Offer AI

ApplicationEventPublisher.publishEvent() — синхронно вызывает всех слушателей в той же транзакции. Если @EventListener бросает exception — откатывается основная транзакция. @Async @EventListener — асинхронно, вне транзакции. @TransactionalEventListener(phase=AFTER_COMMIT) — слушатель вызывается после коммита, вне транзакции (нужна @Transactional(propagation=REQUIRES_NEW) если делает DB операции). @TransactionalEventListener с BEFORE_COMMIT — в той же транзакции перед коммитом. Важно выбрать правильную фазу для надёжности.

Следующий вопрос

Как использовать EXPLAIN для оптимизации JPA запросов?