spring 事务传播级别
spring事务传播级别
- 一、 介绍
- 1.2 各种事务的解释
- 1.2 什么是嵌套事务?
一、 介绍
主要就是下面两张图 ,很重要, 很重要,很重要 .能够清晰的描述出 第一次事务,和 嵌套事务的 关系. 记录一下
- 当前不存在事务 , 直接调用带有事务的方法, 不存在加入外部事务这么一说, 要么就是 新建事务, 要么就是以非事务的方式运行 ,当然,也可以抛出异常
传播级别 | 运行方式 |
---|---|
requires_new | 新建事务 |
nested | 新建事务 |
required | 新建事务 |
supports | 非事务方式运行 |
not_supported | 非事务方式运行 |
never | 非事务方式运行 |
mandatory | 抛出异常 |
- 间接调用,就是 外部的方法新建了事务, 在这种情况下 (说明外部的事务的传播级别为 requires_new, nested 或者 required ), 当前方法的运行方式如下表示:
传播级别 | 运行方式 |
---|---|
requires_new | 新建事务 |
nested | 设置一个 savepoint ,不算是新的事务,单独回滚(排除JTA 情况) |
required | 直接加入到外部事务 |
supports | 直接加入到外部事务 |
not_supported | 挂起外部事务,以非事务的方式运行 |
never | 抛出异常 |
mandatory | 直接加入到外部事务 |
1.2 各种事务的解释
1)PROPAGATION_REQUIRED ,默认的Spring事物传播级别,使用该级别的特点是,如果上下文中已经存在事物,那么就加入到事物中执行,如果当前上下文不存在事物,则新建事物执行。所以这个级别的事物传播别介通常能满足大多数的业务场景。
2)PROPAGATION_SUPPORTS ,从字面意思就知道,supports 支持,该传播级别的特点是,如果上下文存在事物,则支持事物加入,如果没有事物,则使用非事物的方式执行。所以并非所有的包在transactionTemplate.execute中的代码都会有事物支持。这个传播级别通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。
3)PROPAGATION_MANDATORY ,该级别的事物要求上下文中必须要存在事物,否则就会抛出异常!配置该方式的传播级别是有效的控制上下文调用代码遗漏事物控制的保证手段。比如一段代码不能单独被执行调用,但是一旦被调用,就必须有事物包含的情况,就可以使用这个传播级别。
4)PROPAGATION_REQUIRES_NEW ,从字面即可知道,new 每一次都要一个新事物,该传播级别的特点是,每次都会新建事物,并且上下文的事物挂机,执行当前新建事物完成以后,上下文事物回复再执行。
这是一个很有用的传播级别,比如:现在有一个发送100个红包的操作,在发送之前,要做一些系统的初始化、验证、数据记录操作,然后发送100封红包,然后再记录发送日志,发送日志要求100%的准确,如果日志不准备,整个父事物逻辑需要回滚。
怎么处理整个业务需求?就是通过这个PROPAGATION_REQUIRES_NEW级别的事物传播控制就可以完成。发送红包的子食物不会直接影响到父事物的提交和回滚。
5)PROPAGATION_NOT_SUPPORTED ,这个从字面上可知道,not supported 不支持,当前级别的特点就是上下文中存在事物,则挂起事物,执行当前逻辑,结束后回复上下文的事物。
这个事物传播级别有什么好处?可以帮助你将事物极可能的缩小。我们知道一个事物越大,它存在的风险也就越多。所以在处理事物的过程中,要保证尽可能的缩小范围。比如一段代码,是每次逻辑操作都必须要条用的,比如循环1000次的某个非核心业务逻辑操作。这样的代码如果包在事物中,势必造成事物太大,导致出现一些难以考虑周全的异常情况。所以这个事物这个级别的传播级别就派上用场了。用当前级别的事物包起来就可以了。
6)PROPAGATION_NEVER ,该事物更严格,上面的事物传播级别只是不支持,有事物就挂起,而NEVER传播级别要求上下文中不能存在事物,一旦有事物,就抛出runtime异常,强制停止执行!这个事物传播级别可以说跟事物有仇。
7)PROPAGATION_NESTED ,这个从字面可以知道,nested 嵌套级别事物。该传播级别特征是,如果上下文中存在事物,则嵌套事物执行,如果不存在事物,则新建事物。
1.2 什么是嵌套事务?
嵌套事务是子事务套在父事务中执行,子事务是父事务的一部分,在进入子事务之前,父事务建立一个回滚点,叫save point,然后执行子事务,这个子事务的执行也算是父事务的一部分,然后子事务执行结束,父事务继续执行。重点就在于那个save point。以下两个问题点说明:
如果子事务回滚,会发生什么?
父事务会回滚到进入子事务前建立的save point,然后尝试其他的事务或者其他的业务逻辑,父事务之前的操作不会受到影响,更不会自动回滚。
如果父事务回滚,会发生什么?
父事务回滚,子事务也会跟着回滚!因为在父事务结束之前,子事务是不会提交的,子事务是父事务的一部分。
支付宝 | 微信 |
---|---|
如果有帮助记得打赏哦 | 特别需要您的打赏哦 |
【转载】原文出处:spring事务传播级别
【转载】原文出处:Spring事务专题(五)聊聊Spring事务到底是如何实现的
spring 事务传播级别相关推荐
- Spring事务传播性与隔离级别
为什么80%的码农都做不了架构师?>>> 事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题. 事务最重要的两个特性,是事务的传 ...
- Spring事务隔离级别,事务传播行为
什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. Spring事务的隔离性(5种) 在讲隔离界别前,我们先来讲讲下基础知识 事务的特性(ACID) 原子性 ...
- Spring事务传播属性和隔离级别
Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务. ...
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事务: 事务是指程序中的一个操作序列.其特点是:该序列的所有操作要么全部成功完成,要么只要有一个操作失败,则该序列所有操作都将被撤销.这也是事务的原子性(要么成功,要么失败). 2.事务特性 ...
- spring 事务隔离级别和传播行为_Spring事务的传播行为案例分析
网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习. 1.spring给出经常面试的考点Spri ...
- spring事务隔离级别、传播行为以及spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?
AQS到底有什么用?难道就真的只是为了面试吗? 当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力.当然,学习很多时候,需要的是正向反馈,学了太多造火箭的东西,面试完就 ...
- 原创 | CRUD更要知道的Spring事务传播机制
来自:肥朝 AQS到底有什么用?难道就真的只是为了面试吗? 当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力.当然,学习很多时候,需要的是正向反馈,学了太多造火箭的东 ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割: 一致性 (consi ...
- Spring 事务传播原理及数据库事务操作原理
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 先看看 Spring 事务的基础配置 <beans xmlns="http://www.springframework.org/ ...
最新文章
- tnsnames.ora无法保存的问题
- ubuntu14.04设置sublime text3为默认文本编辑器
- SpringBoot 定义通过字段验证
- ace自定义在线编辑器方法及提示
- MAC地址厂商信息查询
- 查看计算机显卡驱动版本,驱动人生检测选择显卡版本教程 电脑显卡公版和官方驱动区别...
- Juniper防火墙配置备份
- 相片打印机原理_照片打印机 技术原理介绍_照片打印机_办公打印评测试用-中关村在线...
- 银联基于OpenStack 的“五高”生产金融云技术白皮书
- CSS 列表样式(ul)
- python生成二维码教程_使用Python生成个性二维码
- SQL 中条件、循环语句的应用整理
- JDK的安装与配置(windows环境)
- Python列表简介
- 我所知道的张小龙 by和菜头
- 两次获得微信生态支持的如祺出行,如何破局网约车市场?
- 程序员都应该知道的福利
- KDD CUP99数据集预处理(Python实现)
- 上手树莓派第一步(树莓派的的网络连接及屏幕分辨率设置)
- 合工大计算机学硕和专硕报录比,2019合肥工业大学计算机考研初试科目、参考书目、报录比汇总...