Spring 事物隔离级别,事物传播行为
Spring 框架中对于事物的管理,主要定义了一下四种属性:
- 事物的隔离(Isolation)级别
- 事物的传播行为(Propagation Behavior)
- 事物的超时时间(TImeout)
- 是否为只读(ReadOnly)
事物的隔离级别又有以下5个常量用于标志可供选择的隔离级别:
- ISOLATION_DEFAULT:如果指定隔离级别为 ISOLATION_DEFAULT,则表示使用数据库默认的隔离级别,通常情况下是 Read Committed。
- ISOLATION_READ_UNCOMMITTED:对应 Read Uncommitted 隔离级别,无法避免脏读,不可重复读和幻读。
- ISOLATION_READ_COMMITTED:对应 Read Committed 隔离级别,可以避免脏读,但无法避免可重复读和幻读。
- ISOLATION_REPEATABLE_READ:对应 Repeatable Read 隔离级别,可以避免脏读和不可重复读,但不能避免幻读。
- ISOLATION_SERIALIZABLE:对应 Serialization 隔离级别,可以避免所有的脏读,不可重复读以及幻读,但并发性效率最低。
事物的传播行为,有以下7种:
- PROPAGETION_REQUIRED:如果当前存在一个事务,则加入当前事务。如果不存在任何事务,则创建一个新的事务。总之,要至少保证在一个事务中运行。Required 通常作为默认的事务传播行为。
- PROPAGETION_SUPPORTS:如果当前存在一个事务,则加入当前事务。如果当前不存在事务,则直接执行。对于一些查询方法来说,那么不需要事务的支持。如果当前方法被其他方法调用,而其他方法启动了一个事务,使用 Supports 可以保证当前方法能够加入当前事务,并洞察当前事务对数据资源所做的更新。
- PROPAGETION_MANDATORY:mandatory 强制要求当前存在一个事务,如果不存在,则抛出异常。如果某个方法需要事务支持,但自身又不管理事务提交或者回滚,那么比较适合使用 mandatory。
- PROPAGETION_REQUIRES_NEW:不管当前是否存在事务,都会创建新的事务。如果当前存在事务,会将当前事务挂起(Suspend)。如果某个业务对象所做的事务不想影响到外层事务, requires_new 应该是合适的选择。比如,假设当前的事务方法需要向数据库中更新写日志信息,但是指这些日志信息更新失败,我们也不想因为该业务方法的事务回滚,而影响到外层事务的成功提交。因为这种情况下,当前业务方法的事务成功与否对外层事务来说无关紧要。
- PROPAGETION_NOT_SUPPORTED:不支持当前事务,而是在没有事务的情况下执行。如果当前存在事务的话,当前事务原则上将被挂起(Suspend)。
- PROPAGETION_NEVER:永远不需要当前存在事务,如果存在事务,则抛出异常。
- PEOPAGETION_NESTED:如果存在当前事务,则在当前事务的一个嵌套事务中执行,否则与 PROPAGETION_REQUIRED 的行为类似,即创建新的事务,在新创建的事务中执行。Nested 粗看起来好像与 PROPAGETION_REQUIRES_NEW 创建的新事务与外层事务属于同一个 “档次”,即二者的地位是相同的。当新创建的事务运行的时候,外层事务将被暂时挂起。而 Nested 创建的嵌套事务则不然,它是寄生于当前外层事务的,它的地位比当前外层事务的地位要小一号。当内部嵌套事务运行的时候,外层事务也是出于 active 状态,如下图涉及的多个事务相互之间的地位。

注意:
1. REQUIRES_NEW 传播行为中,外层事务抛出异常,不会影响内部事务。外部事务的异常会影响外层事务。
2. MyBatis 不支持 NESTED 传播行为,最好不使用。
Spring 事物隔离级别,事物传播行为的更多相关文章
- Spring事务隔离级别和传播特性
相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲, 一天电话里有人问我声明式事务隔离级别有哪几种, 我就回答了7种, 他问我Spring ...
- Spring事务隔离级别和传播特性(转)
相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲,一天电话里有人问我声明式事务隔离级别有哪几种,我就回答了7种,他问我Spring的版本 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- spring事务隔离级别、传播机制以及简单配置
转自 https://blog.csdn.net/zht741322694/article/details/78676964 一.spring支持的事务声明方式1. 编程式事务 当系统需要明确的, ...
- Spring事务隔离级别和传播性
事务的隔离级别也分为四种: read uncommited(读未提交). read commited(读提交). read repeatable(读重复). serializable(序列化), 这四 ...
- spring事物传播机制 事物隔离级别
Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPORTS--支持当前事务,如 ...
- Spring事物隔离级别及事物传播行为@Transactional实现
阅读本篇文章前,请先阅读如下文章: 四种事物隔离级别详解 先看下@Transactional可以配制那些参数及以其所代表的意义. isolation 枚举org.springframework.tra ...
- SQL事物隔离级别
标准SQL定义了4个隔离级别 Read uncommitted 未提交读 Read committed 已提交读 Repeatable read 可重复读 Serializable 可序列化 基本语法 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- 浅谈Spring的事务隔离级别与传播性
浅谈Spring的事务隔离级别与传播性 这篇文章以一个问题开始,如果你知道答案的话就可以跳过不看啦@(o・ェ・)@ Q:在一个批量任务执行的过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚 ...
随机推荐
- 【Python3爬虫】最新的12306爬虫
一.写在前面 我在以前写过一次12306网站的爬虫,当时实现了模拟登录和查询车票,但是感觉还不太够,所以对之前的代码加以修改,还实现了一个订购车票的功能. 二.主要思路 在使用Selenium做模拟登 ...
- 单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机
前端时间要用按键,搞了个状态机(如图): main.c #include <N76E003.H> #include <SFR_Macro.h> //N76E003 SFR寄存器 ...
- kafka原理详解之各种offset和checkpoint
每一个分区都是一个顺序的.不可变的消息队列,并且可以持续的添加.分区中的消息都被分配了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的.一个分区在文件系统里存储为一个文件夹.文 ...
- 通过SharpZipLib实现文件夹压缩以及解压
代码说明 基于SharpZipLib实现Zip压缩解压,扩展实现文件夹级别压缩解压: 项目源码:MasterChief.DotNet.Infrastructure.Zip Install-Packag ...
- Jenkins的使用(三)-------Publish over SSH和Publish over FTP
七.构建后操作 1.使用Publish over SSH 1.左边菜单栏 Manage Jenkins --->ManagePlugins--->可选插件,然后搜索 Publish ...
- C# 生成二维码(QR Code)
参考: C#通过ThoughtWorks.QRCode生成二维码(QR Code) 通过ThoughtWorks.QRCode(ThoughtWorks.QRCode.dll)来实现 1) ...
- PIE SDK归一化水体指数法
1.算法功能简介 归一化指数法(NDWI(Normalized Difference Water Index,归一化水指数)),用遥感影像的特定波段进行归一化差值处理,以凸显影像中的水体信息. 其表达 ...
- 同一个POD中默认共享哪些名称空间
如果通过POD的形式来启动多个容器那么它们的名称空间会是共享的么,所以我这里讨论是在默认情况下同一个POD的不同容器的哪些名称空间是打通的.这里先说一下结论,共享的是UTS.IPC.NET.USER. ...
- spring AOP的两种配置
xml配置 定义要被代理的方法的接口 public interface TestAop { public void print(String s); } 实现上述接口 public class Tes ...
- 使用 Spring 配置动态数据源实现读写分离
关键词:DataSource .AbstractRoutingDataSource.AOP 首先是配置数据源 <!--读数据源配置--><bean id="readData ...