spring事务传播级别
1 事物特性定义
事物最重要的两个特性,是事物的传播级别和数据隔离级别。传播级别定义的是事物的控制范围,事物隔离界别定义的是事物在数据库读写方面的控制范围。今天只写事物的传播级别。
2 事物的传播级别
2.1事物的7种传播级别
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 嵌套级别事物。该传播级别特征是,如果上下文中存在事物,则嵌套事物执行,如果不存在事物,则新建事物。
2.2什么是嵌套事物?
嵌套事物是子事物套在父事物中执行,子事物是父事物的一部分,在进入子事物之前,父事物建立一个回滚点,叫save point,然后执行子事物,这个子事物的执行也算是父事物的一部分,然后子事物执行结束,父事物继续执行。重点就在于那个save point。以下两个问题点说明:
如果子事物回滚,会发生什么?
父事物会回滚到进入子事物前建立的save point,然后尝试其他的事物或者其他的业务逻辑,父事物之前的操作不会受到影响,更不会自动回滚。
如果父事物回滚,会发生什么?
父事物回滚,子事物也会跟着回滚!因为在父事物结束之前,子事物是不会提交的,子事物是父事物的一部分。
以上是事物的7个传播级别,在日常应用中,通常可以满足各种业务需求。
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/ ...
最新文章
- 关于redis的几件小事(三)redis的数据类型与使用场景
- linux y脚本,Linux中脚本的使用方法
- 报错记录:SprintBoot---Unable to start embedded container; nested exception is java.lang……
- 提领指向不完全类型的指针_望远镜不完全指南:望远镜原理、类型和配件
- TypeScript 枚举指南
- ssm整合之四 分页
- 内存条能4+8混插吗?_笔记本内存条双通道提升有多大?实测FORESEE,你知道好处在哪吗...
- Python 数据科学入门教程:NLTK
- python爬虫之多线程、多进程爬虫_python 多线程,多进程,高效爬虫
- FineReport 爬坑之路
- three相机在模型上_深入理解Three.js中透视投影照相机PerspectiveCamera
- 数字经济发展现状_(我的)数字媒体的现状
- Python 分析近2000条“数据分析”相关岗位招聘信息
- 软件产品的税收优惠政策
- Error Code: 1318. Incorrect number of arguments for PROCEDURE student.new_procedure; expected 0, got
- 用OutLook发手机短信
- python猫眼top数据解析画图
- yum安装tomcat
- Python计算越南出线概率
- LOL代练检测——2019腾讯游戏安全技术竞赛决赛记录
热门文章
- 1999年秋浙江省计算机等级考试二级c 编程题,2004年秋浙江省计算机等级考试二级C 编程题(2) (C++代码)...
- 淘宝大秒系统设计详解
- 计算机主机一闪一闪的无法启动,电脑无法正常启动,启动时绿灯一闪一闪的
- 如何通过局域网共享文件夹
- java程序cpu飙升问题排查过程
- 高级JAVA工程师的岗位职责,岗位要求
- C++ 相关职位的要求
- 我创建了一个苹果园小区群和河北老乡群
- 质量流量计测量液体与气体介绍
- java cap是什么_分布式CAP是什么?它的原理是什么?