Вопрос о распространении транзакции spring

У меня вопрос о распространении транзакции spring. Если я использую @Transactional (распространение = Распространение .REQUIRED), чтобы аннотировать метод m1. Когда логика выполнения вводит m1, если уже есть транзакция, m1 будет использовать эту. Когда после m1, как насчет транзакции? Он заканчивается или все еще открывается? (Если я вызываю m1 в другом методе, а после вызова есть еще другие вещи).

Итак, я хочу знать, когда выходите из аннотированного метода, транзакция заканчивается или все еще открывается?

Большое спасибо.

Ответ 1

Propagation.REQUIRED (документированный здесь) создаст новую транзакцию (если она не существует для текущего потока) или присоединится к существующей транзакции (если таковой существует).

Когда метод завершается, транзакция будет завершена (при вводе метода, вызвавшем создание транзакции) или оставит транзакцию открытой (если транзакция уже существовала при вводе метода). В других словах он симметричен и оставит транзакционное состояние потока в том же состоянии, перед тем как был введен метод.