Spring随笔-Spring事务传播

Spring事务是什么?

多个事务方法相互调用,事务如何在这些方法直接进行传递?

方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对方法A事务具体执行造成影响,同时方法A的事务对方法B事务执行也有影响,这种影响具体是什么就由两个方法所定义的事务传播类型所决定;


七个事务传播类型

REQUIRED(Spring默认的事务传播类型)如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务
SUPPORTS当前存在事务,则加入这个事务,若当前不存在事务,则以非事务方法运行
MANDATORY当前事务存在,则加入事务。若当前事务不存在,则抛出异常
REQUIRES_NEW创建一个新事务,若当前事务存在,则挂起新建的事务
NOT_SUPPORTED以非事务方式运行,如果当前存在事务,则挂起当前事务
NEVER不使用事务,如果当前事务存在则抛出异常
NESTED若当前事务存在,则在嵌套事务中执行(父子事务),否则和REQUIRED的操作一样(开启一个事务)

NESTED和REQUIRES_NEW的区别

REQUIRES_NEW是新建一个事务并且开启的新事务_与原有事务无关。而NESTED则是当前存在事务时(存在父事务)会开启一个嵌套事务(子事务)。在NESTED的父事务回滚时,子事务也会回滚,而在REQUIRES_NEW情况下,原有事务回滚不会影响新事务的开启。


NESTED和REQUIRED的区别

REQUIRED情况下,调用方法存在事务时,则被调用方法与调用方法使用同一个事务,那么被调用方法出现异常时,由于共用同一个事务,所以无论方法中是否有catch()语句块捕捉异常,事务都会回滚。而在NESTED事务情况下,被调用方法发生异常时,调用方可以使用catch()捕捉异常,这样子事务会回滚而父事务不受影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值