Вопрос с собеседования · Spring

Что верно про события приложения и @EventListener в Spring?

MiddleКонтейнер изнутриSpring
Ещё спрашивают так:
  • Как работает @TransactionalEventListener?
Коротко

События ApplicationEventPublisher по умолчанию обрабатываются синхронно, в том же потоке и той же транзакции: исключение слушателя откатит публикатора. Асинхронность — явно через @Async.

  • @TransactionalEventListener(phase = AFTER_COMMIT) — только после коммита
  • После коммита сбой слушателя теряет событие — для надёжности outbox
  • Порядок слушателей — @Order

А ещё События внутри приложения не заменяют брокер между сервисами

Подробно

Это самое частое заблуждение по теме: публикация события выглядит как «отправил и забыл», но фактически это обычный вызов метода. Поэтому медленный обработчик замедляет издателя, а брошенное им исключение доходит до вызывающего кода и откатывает транзакцию. Для отправки уведомлений после успешного сохранения нужен @TransactionalEventListener с фазой AFTER_COMMIT — иначе письмо уйдёт даже при откате. Для настоящей асинхронности добавляют @Async и включают @EnableAsync, но тогда обработчик выполняется вне транзакции издателя, и это надо учитывать.

Что хотят услышать

  • Синхронность и транзакция по умолчанию.
  • @Async и @TransactionalEventListener.
  • Ограничения надёжности.

Частые ошибки

  • Считать публикацию события асинхронной по умолчанию.
  • Отправлять внешние уведомления из обработчика до коммита.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓По умолчанию обработчик синхронный — в потоке и транзакции издателя
  • ✓Исключение в обработчике дойдёт до издателя и может откатить транзакцию
  • ✓@TransactionalEventListener откладывает обработку до коммита
  • ✗События по умолчанию обрабатываются асинхронно в отдельном пуле потоков, не блокируя издателя

Что спросят дальше

  • Что произойдёт с AFTER_COMMIT-обработчиком, если транзакция откатится?
  • Почему @Async-метод, вызванный внутри того же бина, не работает?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования