Выбор ответа Senior AOP и прокси обновлено
Порядок ретрая и транзакции
Вопрос
На методе @Retryable и @Transactional. Аспект ретраев выполняется ВНУТРИ транзакционного прокси. Что будет при ошибке оптимистической блокировки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Повтор пойдёт в уже rollback-only транзакции и снова упадёт. Чтобы повторять операцию корректно, ретрай должен быть снаружи: каждая попытка начинает новую транзакцию и перечитывает данные.
Варианты ответа
- Повтор пойдёт в уже rollback-only транзакции и снова упадётправильный ответ
- Каждая попытка ретрая получит новую отдельную транзакцию
- Ретраи будут работать идеально, порядок аспектов не важен
- Spring не позволит совместить эти аннотации на одном методе
Разбор
Чтобы повторять операцию корректно, ретрай должен быть снаружи: каждая попытка начинает новую транзакцию и перечитывает данные. Если ретрай внутри, исключение уже пометило транзакцию rollback-only, а контекст персистентности держит устаревшие сущности. Порядок задают через @Order или атрибут order у @EnableTransactionManagement. Совмещать аннотации можно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.