Spring事务的传播机制

一、什么是Spring 事务的传播机制

传播机制解决了被事务修饰的方法互相调用时,到底是创建两个不同的事务,还是共用同一个事务的问题。

二、七种传播机制

首先介绍两个术语:挂起,嵌套和加入。

  • 挂起:将当前正在执行的事务暂停执行,直接执行新创建的事务
  • 加入:两者合二为一,其中任何一个抛出异常,两者执行的操作都回滚。
  • 嵌套:临时工,就算嵌套抛异常,也只是嵌套回滚,主体还是保持原样就行。

总结:嵌套和加入都是共用同一个事务。

Spring事务传播机制包含以下7种,默认机制就是Propagation.REQUIRED:

  1. Propagation.REQUIRED:默认的事务传播级别,它表示如果当前存在事务,则加入该事务;如果当前没有事务,则创健一个新的事务。
  2. Propagation.SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  3. Propagation...MANDATORY:(mandatory:强制性)如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  4. Propagation.REQUIRES_NEW:表示创健一个新的事务,如果当前存在事务,则把当前事务挂起。也就是说不管外部方法是否开启事务,Propagation.REQUIRES_.NEW修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。
  5. Propagation.NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起
  6. Propagation.NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  7. Propagation.NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。
  • REQUIRED和NESTED的区别:当调用方法存在事务时,REQUIRED是合并两个事务为一个,任何一个事务出现异常,都全部回滚;'NESTED是在调用的地方创建一个保存点,如果被调用的事务出现异常,则回滚保存掉,调用事务继续执行,只有当调用事务出现异常时,才全部回滚。
相关推荐
名字还没想好☜8 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
ltl9 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
·薯条大王9 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO12 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆12 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光12 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林12 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu13 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
ZCBUS实时计算14 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
zd20057214 小时前
海洋微生物数据库
数据库·宏基因组