Выбор ответа Senior AOP и прокси обновлено

Порядок ретрая и транзакции

Вопрос

На методе @Retryable и @Transactional. Аспект ретраев выполняется ВНУТРИ транзакционного прокси. Что будет при ошибке оптимистической блокировки?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Повтор пойдёт в уже rollback-only транзакции и снова упадёт. Чтобы повторять операцию корректно, ретрай должен быть снаружи: каждая попытка начинает новую транзакцию и перечитывает данные.

Варианты ответа

  1. Повтор пойдёт в уже rollback-only транзакции и снова упадётправильный ответ
  2. Каждая попытка ретрая получит новую отдельную транзакцию
  3. Ретраи будут работать идеально, порядок аспектов не важен
  4. Spring не позволит совместить эти аннотации на одном методе

Разбор

Чтобы повторять операцию корректно, ретрай должен быть снаружи: каждая попытка начинает новую транзакцию и перечитывает данные. Если ретрай внутри, исключение уже пометило транзакцию rollback-only, а контекст персистентности держит устаревшие сущности. Порядок задают через @Order или атрибут order у @EnableTransactionManagement. Совмещать аннотации можно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме