Spring事务的传播行为,详细且通俗易懂的解释

REQUIRED(默认的事务传播行为):使用调用方的事务,如果调用方没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的,如果调用方存在事务,则加入当前事务,成为一个整体。(适用于增、删、改、查)
举例:领导没饭吃,我有钱,我会自己买了自己吃;领导有的吃,会分给你一起吃。

SUPPORTS:如果调用方有事务,则使用调用方事务;如果调用方没有事务,则不使用事务。(适用于查询)
举例:领导没饭吃,我也没饭吃;领导有饭吃,我也有饭吃。

MANDATORY:强制调用方必须存在事务,如果不存在,就抛出异常。(不常用)
举例:领导必须管饭吃,没吃饭我就不乐意了,我就抛出异常。

REQUIRES_NEW:如果调用方存在事务,则挂起该事务,我自己创建一个事务。如果当前没有事务,我会自己创建一个。(适用于内部事务和外部事物不关联的情况,比如日志)
举例:领导有饭吃,我偏不要,我自己买饭吃。

NOT_SUPPORTS:如果调用方存在事务,则挂起该事务,不使用事务。(不常用)
举例:领导有饭吃,分我一点,我太忙了不吃。

NEVER:如果调用方存在事务,则抛出异常。(不常用)
举例:领导有饭吃,分我我不吃,我还抛出异常。

NESTED:如果调用方存在事务,则开启子方法事务(嵌套事务),嵌套事务是独立提交或者回滚;
如果调用方没有事务,则同REQUIRED。(不常用)
如果主事务提交,则会携带子事务一起提交。
如果主事务回滚,则子事务也会回滚;如果子事务回滚,则主事务可以回滚也可以不回滚

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring事务管理模块为我们提供了很多的事务传播行为,用来控制在不同的方法调用之间事务传播方式,以及如何处理嵌套事务。下面我来详细介绍一下Spring事务传播行为Spring事务传播行为分为以下 7 种: - PROPAGATION_REQUIRED (默认值):如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入事务;该选项是最常用的选项。 - PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 - PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。 - PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。 - PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 - PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 - PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 除了PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW之外,其它的传播行为都是相对简单的,下面我重点介绍一下PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW的区别。 PROPAGATION_REQUIRED:当前方法调用需要事务,如果当前没有事务,就新建一个事务。如果存在一个事务中,加入事务,成为一个整体。这是最常用的传播行为。 PROPAGATION_REQUIRES_NEW:当前方法必须开启新的事务,并在自己的事务内运行。如果当前存在事务,则挂起该事务。使用PROPAGATION_REQUIRES_NEW时,将会创建一个新的事务,如果新的事务执行成功,则提交该事务;如果新的事务执行失败,则回滚该事务。在PROPAGATION_REQUIRES_NEW的事务中,可以使用savepoint来进行部分回滚。 总之,Spring事务传播行为为我们提供了很多的灵活性,可以根据实际情况来选择不同的传播行为,以达到最佳的事务管理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值