2010-05-02 2 views
9

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

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

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

ответ

17

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

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

+0

Привет, кассирант, а как насчет другого уровня распространения в отношении моего вопроса? –

+0

@Yousui: Различные уровни распространения и их эффекты описаны в ссылке, которую я опубликовал. – skaffman

+0

Спасибо, кадровик, внимательно прочитав ваш ответ и сделав некоторое тестирование, я понял весеннюю политику распространения транзакций. Большое спасибо за вашу помощь. –

Смежные вопросы