【回顾】Spring中的事务处理机制

一、事务的实现原理

就是在要开启事务的方法上加上一个@Transactional注解,当加上之后,spring会使用AOP的思想,对你的这个方法在执行之前,先去开启事务,执行完毕之后,根据你的方法是否报错,来决定回滚还是提交事务。

如:

@Transactional(propagation = Propagation.REQUIRED)
public void method(){
	//其他操作
}

二、事务的传播机制

比方说有一个方法A和一个方法B,方法A上面加了一个事务的注解,方法B上面也加了一个事务的注解:

@Transactional(propagation = Propagation.REQUIRED)
public void methodA(){
	methodB();
}
@Transactional
public void methodB(){
	//相关操作
}

当一个事务方法调用另一个事务方法的过程中,事务应该怎样来传播呢?
Spring的事务传播机制,就是来解决这种两个或者多个方法都加了@Transactional注解的情况下,这些方法互相串起来调用时,事务怎么传播的问题。

几种事务传播的级别:
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该属性为默认属性。
也就是当methodA调用methodB时,如果methodB的事务传播级别是REQUIRED,则methodB中的操作会被一起加入到methodA中开启的事务里面去。
也就是把methodB中的代码加入到第一个事务里面去。

2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
也就是当methodA调用methodB时,如果methodB的事务传播级别是SUPPORTS,因为methodA已经开启了一个事务了,则methodB中的代码会加入到methodA开启的事务里面去;
如果直接调用methodB,因为当前并没有开启事务,则methodB中的代码会以非事务的方式去执行。

3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

4、PROPAGATION_REQUIRES_NEW:不论当前存不存在事务,都创建新事务。

5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则按REQUIRED属性执行。

平时用的比较多的有:
PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值