spring的事务传播机制

spring事务传播概述

spring的事务传播是spring语言层面实现的,而事务隔离级别是通过MySQL、Oracle等提供的事务接口实现的,spring的额事务传播机制有7种,下面我们就来一一介绍:

spring的7种传播机制

PROPAGATION_REQUIRED

spring默认的传播机制,能满足绝大部分的业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行。下面来看一个场景:
代码块
上图是默认传播,方法A调用方法B,那么B会加入到A事务,出现异常两个方法都会回滚。

PROPAGATION_REQUIRES_NEW

该事务传播机制每次都会新开启一个事务,同时把外层事务挂起,当前事务执行完毕,恢复上层事务执行,如果外层没有事务,执行当前新开启的事务即可。
仍然以上面的场景方法A调用方法B作为一个例子,意味着方法A和方法B是两个独立的事务,当执行方法B时方法A的事务会被挂起等待B执行完才执行,若是方法B发生异常回滚,在方法A没有捕获异常的情况下方法A也会回滚,但是如果方法A种捕获并处理异常后则不会随着B回滚。

PROPAGATION_SUPPORTS

如果外层有事务则加入外层事务,如果外层没有事务则使用非事务方式执行,完全依赖外层事务。

PROPAGATION_NOT_SUPPORTED

该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码则恢复外层事务,无论是否异常都不会回滚当前代码。

PROPAGATION_NEVER

该传播机制不支持外层事务,如果外层有事务则抛出异常。

PROPAGATION_MANDATORY

与NEVER相反,如果外层没有事务则抛出异常。

PROPAGATION_NESTED

该传播机制的特点是可以保存状态保存点,当事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常处理掉,基本还是会引起全部回滚的。

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页