Spring中的事务传播行为有哪些?

开发 前端
在日常开发中,我们经常会存在多个声明了事务的方法相互调用,在这种情况下,会存在嵌套两个或两个以上事务的情况,所谓事务传播行为就是指这些事务之间的传播规则。

今天,我给大家分享一下,我对Spring传播行为的理解。

1、事务传播行为

图片

在日常开发中,我们经常会存在多个声明了事务的方法相互调用,在这种情况下,会存在嵌套两个或两个以上事务的情况,所谓事务传播行为就是指这些事务之间的传播规则。来看这样一段代码:

@Transaction(Propagation = REQUIRED_NEW)

public void methodA(){

}

@Transaction(Propagation = REQUIRED)

public void methodB(){

methodA();

}

在这段代码中,methodB()调用了methodA(),两个方法都显示的开启了事务。methodA()是开启一个新事务,还是继续在methodB()这个事务中执行?就取决于事务的传播行为规则的定义。

2、事务嵌套

图片

事务嵌套是指两个或两个以上开启的事务的方法嵌套调用,在这种情况下,需要制定这些事务之间的传播行为规则。在Spring中,一共定义了7种内置的事务嵌套传播行为:

第1种:REQUIRED,它是Spring默认的事务传播行为。表示如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。

第2种:REQUIRE_NEW:表示不管是否存在事务,都会新建一个事务,新建的事务和原来已经定义的事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。

第3种:NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务, 则新建一个事务,类似于REQUIRE_NEW。

第4种:SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。

图片

第5种:NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前事务挂起。

第6种:MANDATORY:强制事务执行,若当前不存在事务,则抛出异常.

第7种:NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。

图片

Spring事务传播一般不需要开发人员显式定义,默认就是PROPAGATION_REQUIRED,只要在嵌套事务的情况下需要重点了解。

责任编辑:武晓燕 来源: Tom弹架构
相关推荐

2021-09-02 18:39:01

Spring隔离级别

2023-10-30 07:36:19

Spring事务传播机制

2024-12-17 16:26:31

2022-09-22 09:57:20

Spring事务失效

2024-01-04 12:48:00

Spring

2010-05-05 09:33:46

Oracle事务

2020-07-17 08:07:54

Spring数据库事务

2022-06-30 16:03:28

Spring事务传播

2019-10-25 16:12:35

Spring传播属性数据库

2022-09-27 21:14:54

Spring事务传播机制

2020-01-07 13:34:03

网络攻击恶意软件网络安全

2009-06-22 09:01:57

Spring声明式事务

2022-09-27 12:01:56

Spring异步调用方式

2021-07-12 10:37:42

Spring面试事务

2020-08-19 09:45:29

Spring数据库代码

2023-05-06 07:29:49

Spring事务传播

2024-11-21 16:09:22

2023-11-02 07:52:30

Java工具

2012-06-07 09:18:16

ibmdw

2009-12-22 15:55:10

WCF事务
点赞
收藏

51CTO技术栈公众号