事务传播行为

Spring中七种事务传播行为
在这里插入图片描述
!!!事务的生效必须是一个类调用另一个类的方法,同一个类之中方法调用事务不生效

1.PROPAGATION_REQUIRED
User1Service方法:
在这里插入图片描述
User2Service方法:
在这里插入图片描述
1.1.外围方法没有开启事务,内部方法是PROPAGATION_REQUIRED

在这里插入图片描述
“张三”、“李四”均插入。
外围方法未开启事务,插入“张三”、“李四”方法在自己独立的事务中运行,外围方法异常不影响内部插入“张三”、“李四”方法独立的事务。

在这里插入图片描述
“张三”插入,“李四”未插入。
外围方法没有事务,插入“张三”、“李四”方法都在自己独立的事务中运行,所以插入“李四”方法抛出异常只会回滚插入“李四”方法,插入“张三”方法不受影响。

通过这两个方法我们证明了在外围方法未开启事务的情况下Propagation.REQUIRED修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。

1.2.外围方法是PROPAGATION_REQUIRED,内部方法是PROPAGATION_REQUIRED
在这里插入图片描述
“张三”、“李四”均未插入。
外围方法开启事务,内部方法加入外围方法事务作为同一个事务,外围方法回滚,内部方法也要回滚。

在这里插入图片描述
“张三”、“李四”均未插入。
外围方法开启事务,内部方法加入外围方法事务作为同一个事务,内部方法抛出异常回滚,外围方法感知异常致使整体事务回滚

在这里插入图片描述
“张三”、“李四”均未插入。
外围方法开启事务,内部方法加入外围方法事务作为同一个事务,内部方法抛出异常回滚,即使方法被catch,但外围事务和内部事务作为同一个事务依然能感知到,所以整个事务依然回滚。

2.PROPAGATION_REQUIRES_NEW
User1Service方法:
在这里插入图片描述
User2Service方法:
在这里插入图片描述
2.1.外围方法没有开启事务,内部方法是PROPAGATION_REQUIRES_NEW
在这里插入图片描述
“张三”插入,“李四”插入。
外围方法没有事务,插入“张三”、“李四”方法都在自己独立的事务中运行,外围方法抛出异常回滚不会影响内部方法。

在这里插入图片描述
“张三”插入,“李四”未插入。
外围方法没有开启事务,插入“张三”方法和插入“李四”方法分别开启自己的事务,插入“李四”方法抛出异常回滚,其他事务不受影响。

2.2.外围方法是PROPAGATION_REQUIRED,内部方法是PROPAGATION_REQUIRES_NEW
在这里插入图片描述
“张三”未插入,“李四”插入,“王五”插入。
外围方法开启事务,插入“张三”方法和外围方法是通一个事务,插入“李四”方法、插入“王五”方法分别在独立的新建事务中,外围方法抛出异常只回滚和外围方法同一事务的方法,故插入“张三”的方法回滚。

在这里插入图片描述
“张三”未插入,“李四”插入,“王五”未插入。
外围方法开启事务,插入“张三”方法和外围方法是同一个事务,插入“李四”方法、插入“王五”方法分别在独立的新建事务中。插入“王五”方法抛出异常,首先插入 “王五”方法的事务被回滚,异常继续抛出被外围方法感知,外围方法事务亦被回滚,故插入“张三”方法也被回滚。

在这里插入图片描述
“张三”插入,“李四”插入,“王五”未插入。
外围方法开启事务,插入“张三”方法和外围方法一个事务,插入“李四”方法、插入“王五”方法分别在独立的新建事务中。插入“王五”方法抛出异常,首先插入“王五”方法的事务被回滚,异常被catch不会被外围方法感知,外围方法事务不回滚,故插入“张三”方法插入成功。

转载自:https://blog.csdn.net/yuan520588/article/details/88919659

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值