谈一下Spring事务传播机制?

谈一下Spring事务传播机制?

传播特性有几种? 七种。
Required,Requires_new,nested,Support,Not_Support,Never,Mandatory

某一个事务嵌套另一个事务的时候怎么办?
A方法调用B方法,AB方法都有事务,并且传播特性不同,那么如果A有异常,B怎么办?如果B有异常,A怎么办?

总:事务的传播特性是指不同方法的嵌套调用过程中,事务应该如何进行处理,是用同一个事务还是不同的事务,当出现异常的时候是会回滚还是提交,两个方法之间的相互影响,在日常工作中,使用比较多的是required,required_new,nested

分:
1、先说事务的不同分类,可以分为三大类:支持当前事务,不支持当前事务,嵌套事务

支持当前事务:
Required——默认的传播特性,如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务。
Supports——当前存在事务,则加入当前事务,如果当前没有事务,则以非事务的方式执行。
Mandatory——当前存在事务,则加入当前事务,如果当前没有事务,则以非事务的方式执行。

不支持当前事务:
Required New——创建一个新事务,如果存在当前事务,则挂起该事务。
Not Supported——以非事务的方式执行,如果存在当前事务,则挂起当前事务。
Never——不使用事务,如果当前事务存在,则抛出异常。

嵌套事务:
Nested——如果当前事务存在,则在嵌套事务中执行,否则新建一个事务。

Required_new和Nested的区别:
Required_new是新建一个事务并且新开始的这个事务与原有事务无关,而Nested则是当前存在事务时会开启一个嵌套事务,在Nested情况下,父事务回滚时,子事务也会回滚,而Required_new情况下,原有事务回滚,不会影响新开启的事务。

Nested和Required的区别:
Required情况下,调用方存在事务时,则被调用方和调用方使用同一个事务,那么被调用方出现异常时,由于共用一个事务,所以无论是否catch异常,事务都会回滚,而在Nested情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不会回滚。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值