事务的传播机制通俗易懂

场景:在方法A中包含方法B的调用。

比如:方法A

# fly账号给zhangshang转账100块钱
public void user(fly,zhangshan,100){
		add(zhangshang,100);   //张三加100
		sub(fly,100)   //fly减100
}  

方法B就是add跟sub

注意事务传播行为的注解一般放在方法B上

事务传播行为的注解:

propagation_requierd(必须的)

1、如果事务注解加在方法A上,事务传播注解放在方法B上:

执行方法A,方法A会开启事务,当执行到方法B的时候,方法B会加入到方法A中的事务

2、如果事务注解不加在方法A上,事务传播注解放在方法B上:

方法A因为不存在事务,方法B会开启一个新的事务运行。

总结:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中

propagation_supports(支持)

1、如果事务注解加在方法A上,事务传播注解加在方法B上:

外层方法A开启事务,然后方法B也会加入到方法A中的事务

2、如果事务注解不加在方法A上,事务传播注解加在方法B上,那么:

方法A没有事务,且方法B也没有事务

总结:如果方法A有事务则方法B加入该事务,如果方法A没有事务,那么方法B也没有事务

propagation_mandatory(强制)

1、如果事务注解加在方法A上,事务传播注解加在方法B上:

外层方法A开启事务,然后方法B也会加入到方法A中的事务

2、如果事务注解不加在方法A上,事务传播注解加在方法B上,那么:

方法A没有事务,方法B会抛出异常

propagation_required_new(隔离)

1、如果事务注解加在方法A上,事务传播注解加在方法B上:

方法A有事务,但是方法B会把方法A的事务给挂起暂停了然后自己新建一个事务去运行

2、如果事务注解不加在方法A上,事务传播注解加在方法B上,那么:

方法A没有事务,方法B也新建一个事务去运行

propagation_not_supported(不支持)

1、如果事务注解加在方法A上,事务传播注解加在方法B上:

方法A有事务,方法B会把方法A的事务给挂起暂停了,然后以没有事务的方式运行

2、如果事务注解不加在方法A上,事务传播注解加在方法B上,那么:

方法A没有事务,方法B也没有事务

propagation_never(强制非事务)

1、如果事务注解加在方法A上,事务传播注解加在方法B上:

方法A有事务,方法B抛出异常

2、如果事务注解不加在方法A上,事务传播注解加在方法B上,那么:

方法A没有事务,方法B没有事务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值