У меня есть вопрос о распространении весенних транзакций. Я понимаю разное распространение транзакций Spring, т. Е. Propagation.REQUIRED
, Propagation.REQUIRES_NEW
и т. Д. Я не совсем понимаю, как он будет вести себя в случае вложенных транзакций с разными значениями распространения.Spring @Transactional свойство распространения
Например, если я использую @Transactional(propagation = Propagation.REQUIRED)
, чтобы аннотировать метод m1
. Если я вызываю метод m2
, который аннотируется как REQUIRES_NEW
. Каким будет поведение? Если исключение происходит в m2
, оно откатит изменения в m2
, а также m1
или только изменения m1
. Аналогичным образом m1
аннотируется как REQUIRES_NEW
и m2
как REQUIRED
.
Благодарим takteek за предоставленную ссылку на весеннюю документацию. Я уже видел эту ссылку. В первую очередь я смотрю на поведение транзакции, когда два метода имеют разные уровни распространения. Взяв ваш первый пример, если я вношу некоторые изменения в методе m1, а затем называю m2, что произойдет, если исключение произойдет в m2. Все изменения, внесенные в м2, будут отброшены назад и что произойдет с изменением m1. Что произойдет, если в m1 есть исключение. Изменения m2 будут совершены или откат. – Vaishu13
С 'REQUIRES_NEW' это отдельная физическая транзакция. Исключение из m2 приведет к откату транзакции m2. До тех пор, пока вы исключаете исключение из m1, m1 может совершить штраф. Настройка распространения m1 не имеет значения для m2. – takteek
Спасибо. Можно ли объяснить это примером и более подробным объяснением. Я искал в Интернете, но я не нашел примеров для этого. Я думаю, что это более или менее общий прецедент, чтобы развить разное распространение, но недостаточно информации. – Vaishu13