Spring事务的两种常用传播方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/82715200

为什么会有事务的传播方式呢?
因为有时候是有嵌套事务的存在的。
就比如买一书的时候你给加了事务(锁住一本书减库存,减余额),

那如果买多本书呢?
可以在买多本书的方法上加事务。
这就形成了嵌套事务。

使用propagation指定事务的传播方式,
即当前事务方法被另一个事务方法调用时如何使用事务。

常用的有·两种方式·来实现嵌套事务的实现:

//默认情况下,即使用当前方法的事务。
@Transactional(propagation = Propagation.REQUIRED) 
//创建新的事务。 
@Transactional(propagation = Propagation.REQUIRES_NEW) 

两张图来区别下:

@Transactional(propagation = Propagation.REQUIRED) :·

这里写图片描述

@Transactional(propagation = Propagation.REQUIRES_NEW)

这里写图片描述

简而言之两者区别:嵌套事务中

Propagation.REQUIRED :

以外层嵌套事务为单元,只要有任意一个事务的操作错误,终止全部内容。

Propagation.REQUIRES_NEW:

以内层嵌套事务为单元,只终止发生错误的事务,其他事务互不影响。

注意:

默认是:Propagation.REQUIRED

记住:
@Transactional(propagation = Propagation.REQUIRES_NEW)是加在内层的事务中,而不是外层的事务。

猜你喜欢

转载自blog.csdn.net/qq_38409944/article/details/82715200