M-BOSS

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


В Spring Framework методы, помеченные аннотацией @Transactional, обрабатываются как транзакционные методы. Если внутри нетранзакционного метода вызывается транзакционный метод, то поведение будет зависеть от того, как настроена транзакционность в вашем приложении. Если внутри нетранзакционного метода вызывается транзакционный метод, и у вас установлена стратегия транзакций по умолчанию (по умолчанию Spring использует PROPAGATION_REQUIRED), то вызываемый транзакционный метод будет выполняться в рамках текущей транзакции, если она уже существует. Если же текущая транзакция отсутствует, то будет создана новая транзакция для выполнения вызываемого транзакционного метода. Однако, если у вас установлена стратегия PROPAGATION_NOT_SUPPORTED для вызываемого транзакционного метода, то он будет выполняться без транзакции, независимо от наличия или отсутствия текущей транзакции в вызывающем методе. Поэтому важно понимать настройки транзакций в вашем приложении и какие стратегии транзакций применяются к вызываемым методам, чтобы обеспечить правильное поведение и избежать нежелательных сценариев работы с транзакциями.


Копировать ссылку