Spring事务传播行为REQUIRES_NEW和NESTED用法栗子

1. Spring事务传播行为propagation:

Spring事务还有7种传播行为(propagation),是为了业务层之间调用事务关系而提出的,数据库层面并存在事务传播行为

  • REQUIRED:默认传播行为,当前有事务,就加入;没有事务就新建一个
  • SUPPORTS:当前有事务,就加入;没有事务就按非事务来调用
  • MANDATORY:当前有事务,就加入;没有事务就抛异常
  • REQUIRES_NEW:无论当前有没有事务,都会新建事务
  • NOT_SUPPORTED:如果当前有事务,事务挂起, 以非事务来执行;当前无事务,也以非事务来执行
  • NEVER:以非事务来执行,如果当前有事务,抛异常
  • NESTED:嵌套事务执行,如果没有事务就按REQUIRED来执行,也就是新建一个事务
2. 举个栗子:

比如常见的主方法不回滚而子方法异常回滚,就是通过传播行为控制的

在这里插入图片描述

 注意点:

  • 当子方法传播行为是NESTED时,虽然子方法没有异常,但是主方法异常了,就导致子方法和主方法都回滚,因为子方法嵌套用的主方法的事务
  • 当子方法传播行为是REQUIRED_NEW时,子方法会新建事务,子方法异常就回滚,而主方法catch了异常,所以不会触发主方法事务回滚
  • 主方法要catch异常,避免子方法异常而影响主方法事务回滚,主方法要想回滚就得再抛出运行时异常
  • 子方法不能是自调用,也就是不能在同一个类,和代理有关
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值