Spring事务(二)-事务传播行为

Spring事务(二)-事务传播行为

在Spring里,一个事务方法被另外一个事务方法调用时,两个方法的事务应该如何进行,说白话一点,就是说当出现异常需要回滚时,各个方法的数据操作是否要全部回滚,事务传播行为就是决定了这样的一个处理结果。A事务方法(外部方法)调用了B事务方法(内部方法,又叫被调用方法),B是继续在A的事务中运行呢?还是为自己另开一个新事务运行呢?这就是由B的事务传播行为决定的。

@Transactional注解通过propagation属性设置事务事务传播行为,如下:

@Transactional(propagation = Propagation.REQUIRED)
public void method(){}

Spring的事务传播行为一共有7种:

1、REQUIRED

这是默认传播行为。如果当前没有事务,就新建一个事务。如果当前已经存在事务,就加入到这个事务中。这个当前事务指的是外部方法本身的事务。

2、REQUIRES_NEW

开启一个新的事务。如果当前已经存在事务,则先将这个存在的事务挂起。( 当类A中的 a 方法用默认Propagation.REQUIRED模式,类B中的 b方法加上采用 Propagation.REQUIRES_NEW模式,然后在 a 方法中调用 b方法操作数据库,然而 a方法抛出异常后,b方法并没有进行回滚,因为Propagation.REQUIRES_NEW会暂停 a方法的事务。 )

3、SUPPORTS

如果当前存在一个事务,就加入到这个事务中。如果当前没有事务,则非事务方式执行。

4、MANDATORY

如果当前存在一个事务,就加入到这个事务中。如果当前没有开启事务,则抛出异常。

5、NOT_SUPPORTED

总是非事务方式执行,并挂起任何存在的事务。

6、NEVER

非事务方式运行,当前存在事务抛出异常。

7、NESTED

如果当前存在一个事务,则运行在一个嵌套的事务中。 如果当前没有开启事务, 则按 REQUIRED 属性执行。这里所说的”运行在一个嵌套的事务中”,其实就是说运行在外层事务的子事务中,这个子事务有单独的保存点,因此,当内部方法抛异常时,不会影响到外部方法的事务,也就是说,外部方法的数据操作仍然可以提交。

Original: https://www.cnblogs.com/ayic/p/16464340.html
Author: Yi00
Title: Spring事务(二)-事务传播行为

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577956/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • gitlab拉取指定目录

    1.新建目录 mkdir git 2.初始化本地目录 git init 3.启用过滤的配置项 git config core.sparsecheckout true 4.想要拉取哪…

    Linux 2023年6月6日
    097
  • Linux动静分离与Rewrite

    一、动静分离 1.1 单台机器动静分离 1、创建NFS挂载点(NFS服务端) mkdir /static vim /etc/exports /static 172.16.1.0/2…

    Linux 2023年5月27日
    0109
  • CentOS7安装MYSQL8.X详细教程

    1-首先查看系统是否存在mysql,无则不返回 rpm -qa|grep mysql 2-安装wget yum -y install wget 3-抓取mariadb并删除包,无则…

    Linux 2023年5月27日
    094
  • shell 同时执行多任务下载视频

    本文为博主原创,转载请注明出处: shell 脚本不支持多线程,但我们需要用shell 脚本同时跑多个任务时怎么让这些任务并发同时进行,可以采用在每个任务 后面 添加一个 &amp…

    Linux 2023年5月28日
    0111
  • Linux基础学习(四)

    自建yum仓库,分别为网络源和本地源 1.本地源 点击查看代码 root@ct7:~# yum install autofs root@ct7:~# systemctl enabl…

    Linux 2023年6月8日
    0135
  • Mybatis的递归查询实现二级评论

    最近闲来无事,在做毕业设计。前台页面需要一个评论功能,感觉三方的评论太复杂,功能也太多。就想着自己写一个简单点的,本人比较菜,方法比较笨,可能效率不高。 环境介绍 后端:Sprin…

    Linux 2023年6月8日
    0108
  • django解析POST过来的json时,Unterminated string starting

    结论:我遇到的问题是与号( &), 分号( ; ), 等号( = ) 都会成为字符串分割符。导致后端解析json参数失败 1.bug产生背景 handsontable插件实…

    Linux 2023年6月8日
    0101
  • npm 和 maven 使用 Nexus3 私服 | 前后端一起学

    前文《Docker 搭建 Nexus3 私服 》介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(…

    Linux 2023年6月7日
    075
  • (读书笔记)基于CMMI的软件工程及实训指导 第13-16章

    一、软件测试 软件测试是为了发现程序中的错误而执行的过程。测试只能证明软件有错,而不能保证软件程序没错。 1. 软件版本 Alpha版 公司内测版本 Beta版 对外公测版本 发布…

    Linux 2023年6月14日
    089
  • 高等代数:5 矩阵的相抵与相似

    5 矩阵的相抵与相似 1、设S,M是两个集合,则集合 ({(a,b)|a \in S,b \in W}) 称为S与M的 笛卡儿积,记作:(S \times M)。 2、定义1:设S…

    Linux 2023年6月8日
    0134
  • 演示webuploader和cropperjs图片裁剪上传

    最近有个项目要在浏览器端裁剪并上传图片。由于缺乏人力,只能我上阵杀敌。通过参考各种文章,最后决定用cropperjs进行图片裁剪,用webuploader上传文件。本文涉及到的知识…

    Linux 2023年6月6日
    0110
  • 每天一个 HTTP 状态码 前言

    HTTP 状态码由 3 位阿拉伯数字构成,其中第一位用于定义 HTTP 响应的类型… 前前言 在重新开始写博文(其实大多也就最多算是日常笔记小结)之际,就想着从短小精悍…

    Linux 2023年6月7日
    095
  • 每天一个 HTTP 状态码 102

    102 Processing 是用于 WebDAV 请求的一种状态码… 102 Processing 102 Processing 是用于 WebDAV协议 请求的状态…

    Linux 2023年6月7日
    0115
  • sqlcmd执行含中文等字符的sql脚本时报错解决方案

    阅文时长 | 0.41分钟字数统计 | 668.8字符主要内容 | 1、问题说明 2、解决方案 3、常用的Code Page 4、声明与参考资料『sqlcmd执行含中文等字符的sq…

    Linux 2023年6月14日
    0112
  • SSH免密登录

    SSH免密登录实现三步: 客户端生成公钥和私钥 上传公钥到服务端 SSH免密登录 (1) 客户端生成和公钥和私钥 ssh-keygen 一路回车即可,默认会在~/.ssh/目录下创…

    Linux 2023年6月7日
    0103
  • 使用JMeter和Zabbix进行压力测试

    Zabbix JMeter 目标 reference Zabbix Zabbix区分探针端、服务端、数据库、WEB前端等多个组件,如果你是在企业内使用,尽量使用运维同学搭建好的环境…

    Linux 2023年6月6日
    0100
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球