Spring事务的传播方式

Spring 事务的传播行为定义了当一个事务方法调用另一个事务方法时,两个方法的事务如何关联。Spring 中通过 @ TransactionalPropagation 枚举类定义了 7 种传播方式,具体如下:

1. REQUIRED(默认传播行为)

如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。

2. SUPPORTS

如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行(不开启事务)。

3.MANDATORY(强制)

必须在已存在的事务中执行;如果当前没有事务,则直接抛出 IllegalTransactionStateException 异常。

4. REQUIRES_NEW

无论当前是否存在事务,都新建一个独立的事务;如果当前存在事务,则将当前事务挂起(暂停执行),直到新事务完成。

5. NOT_SUPPORTED

以非事务方式执行;如果当前存在事务,则将当前事务挂起(直到非事务操作完成)。

6. NEVER(绝不)

必须在非事务环境中执行;如果当前存在事务,则直接抛出 IllegalTransactionStateException 异常。

7. NESTED(嵌套)

如果当前存在事务,则在嵌套事务中执行(当前事务的 "子事务",依赖主事务);如果当前没有事务,则创建一个新事务(与 REQUIRED 一致)。

Spring 在处理是否存在事务时是通过 ThreadLocal 存放事务资源,如果存在事务那么从ThreadLocalget方法获取到事务信息的不为空,那么这个时候根据事务传播方式进一步处理

相关推荐
XDHCOM20 小时前
ORA-32484重复列名错误,ORACLE数据库CYCLE子句故障修复与远程处理方案
数据库·oracle
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132120 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
翻斗包菜20 小时前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
gelald20 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川20 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
呆瑜nuage20 小时前
MySQL表约束详解:8大核心约束实战指南
数据库·mysql
一轮弯弯的明月20 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66620 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter