Spring的事务支持

目录

 

PROPAGATION_REQUIRED(默认)

PROPAGATION_SUPPORTS

PROPAGATION_MANDATORY

PROPAGATION_REQUIRES_NEW

PROPAGATION_NOT_SUPPORTED

PROPAGATION_NEVER

PROPAGATION_NESTED


 

PROPAGATION_REQUIRED(默认)

方法A调用方法B,并且都声明了事务,那么方法B不会开启独立事务,而是将自己的操作放在方法A的事务中来执行,方法A和方法B任何一个报错都会导致整个事务回滚。

如果方法B没有开启事务,那就新开启一个事务,方法A和方法B任何一个报错都会导致整个事务回滚。

PROPAGATION_SUPPORTS

方法A调用方法B,如果方法A开启了事务,那么方法B就将自己加入到方法A中来执行;如果方法A没有开启事务,那么方法B自己也不开启事务。

PROPAGATION_MANDATORY

必须被一个开启了事务的方法来调用自己,否则报错,例如方法A调用方法B,方法A必须开启事务。

PROPAGATION_REQUIRES_NEW

方法A调用方法B,并且都声明了事务,方法A的事务会等方法B的事务完成后才会继续。也就是方法A报错,不会影响方法B;方法B报错,方法A可以选择回滚或者继续提交事务。

PROPAGATION_NOT_SUPPORTED

方法A调用方法B,方法A开启了事务,方法B不支持事务,方法A的事务执行到方法B的时候,方法A的事务会挂起,等方法B用非事务的方式运行结束再继续。

PROPAGATION_NEVER

不能被一个事务来调用,方法A调用方法B,方法A开启了事务,但是调用方法B会报错。

PROPAGATION_NESTED

嵌套事务,方法A调用方法B,并且都声明了事务,如果方法A回滚,那么方法B也一起回滚,这是和PROPAGATION_REQUIRES_NEW的区别;

但是方法B异常回滚,方法A可以catch其异常,这样只有方法B事务回滚,方法A事务不受影响,这是和PROPAGATION_REQUIRED的区别。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值