Spring事务传播属性和隔离级别

Spring事务传播属性和隔离级别

 

 

 

一、Spring事务传播属性(Propagation):

1) REQUIRED(默认属性)
如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。 
被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。 

2) MANDATORY 
支持当前事务,如果当前没有事务,就抛出异常。 

3) NEVER 
以非事务方式执行,如果当前存在事务,则抛出异常。 

4) NOT_SUPPORTED 
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 

5) REQUIRES_NEW 
新建事务,如果当前存在事务,把当前事务挂起。 

6) SUPPORTS 
支持当前事务,如果当前没有事务,就以非事务方式执行。 

7) NESTED 
支持当前事务,新增Savepoint点,与当前事务同步提交或回滚。 
嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。 

PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别:
它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。

使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务管理器的支持。 
使用PROPAGATION_NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。 

二、Spring事务隔离级别(Isolation Level):

1.首先说明一下事务并发引起的三种情况:

1) Dirty Reads 脏读 
一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据,而前一个事务如果操作失败进行了回滚,后一个事务读取的就是错误数据,这样就造成了脏读。


2) Non-Repeatable Reads 不可重复读 
一个事务多次读取同一数据,在该事务还未结束时,另一个事务也对该数据进行了操作,而且在第一个事务两次次读取之间,第二个事务对数据进行了更新,那么第一个事务前后两次读取到的数据是不同的,这样就造成了不可重复读。


3) Phantom Reads 幻像读 
第一个数据正在查询符合某一条件的数据,这时,另一个事务又插入了一条符合条件的数据,第一个事务在第二次查询符合同一条件的数据时,发现多了一条前一次查询时没有的数据,仿佛幻觉一样,这就是幻像读。


非重复度和幻像读的区别:
非重复读是指同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。

幻像读是指同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。

表面上看,区别就在于非重复读能看见其他事务提交的修改和删除,而幻像能看见其他事务提交的插入。 

 

2.隔离级别:

1) DEFAULT (默认) 
这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应。

2) READ_UNCOMMITTED (读未提交) 
这是事务最低的隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。 

3) READ_COMMITTED (读已提交) 
保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。 

4) REPEATABLE_READ (可重复读) 
这种事务隔离级别可以防止脏读、不可重复读,但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读。

5) SERIALIZABLE(串行化) 
这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。除了防止脏读、不可重复读外,还避免了幻像读。 

 

隔离级别解决事务并行引起的问题:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net 解析Transfer-Encoding:chunked 秒掉网上无用方案

昨天在爬数据时,发现某个网站Response.Get过来的数据一直是为空。当时就很奇怪,认真看下了响应头。发现Transfer-Encoding:chunked这个玩意网上查了下资料一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定…

unity检测范围内敌人_Unity实现视野范围外死亡敌人的分数显示在屏幕内

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test01 : MonoBehaviour{Transform cam;//相机物体Vector3 pos;// Start is called before the first frame updatevoid Start(){pos transform.position;c…

ClickHouse之简单性能测试

前面的文章ClickHouse之初步认识已经简单的介绍了ClickHouse,接下来进行简单的性能测试。测试数据来源于美国民用航班的数据,从1987年到2017年,有1.7亿条。 环境: centos 6.3,32G内存,24核 下载脚本&#x…

mysql主从从配置详解_MySQL主从配置详解

● 本打算买个云数据,为我的新项目做点安全保障。阿里云,腾讯云转了一圈,两个字太贵。不就数据有备份吗,既然这样那我不如自己来做备份。● 家里有2个树莓派直接把mysql备份到他们上就好了,网上有教程,这就…

泛型数组

定义泛型数组 在写程序时,大家可能会遇到类似String[] list new String[8];的需求,这里可以定义String数组,当然我们也可以定义泛型数组,泛型数组的定义方法为 T[],与String[]是一致的,下面看看用法&#…

是前端类库还是前端框架?

一、BootstrapBootstrap是一系列常用CSS和jQuery plugin的集合,典型的UI库,带给你的是栅格系统,是预置的按钮、表单、列表、导航、响应式等样式,它在你独立开发的时候非常有用。因为能节约用来设计网页的时间,而且这套…

mysql php pdo例_PHP的PDO操作实例

try{$dbmsmysql; //数据库类型 ,对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数$host127.0.0.1; //数据库主机名$dbNamebooks; //使用的数据库$userroot; //数据库连接用户名$pass; …

Java泛型详解:<T>和Class<T>的使用,泛型类

单独的T 代表一个类型 &#xff0c;而 Class代表这个类型所对应的类&#xff0c; Class<&#xff1f;>表示类型不确定的类 E - Element (在集合中使用&#xff0c;因为集合中存放的是元素)T - Type&#xff08;Java 类&#xff09;K - Key&#xff08;键&#xff09;V - …

HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3183 题解&#xff1a; 方法一&#xff1a;贪心。 在草稿纸上试多几次可以知道&#xff0c;删除数字中从左到右最后一位递增&#xff08;可以等于&#xff09;的数字&#xff0c;可以得到最小值&#xff0c;在这…

python入门知识大全_python基础知识有哪些

Python基础知识&#xff1a;1、引用和对象&#xff1b;2、可变数据类型和不可变数据类型&#xff1b;3、引用传递和值传递&#xff1b;4、深拷贝和浅拷贝&#xff1b;5、基本数据类型&#xff1b;6、关键字、标识符和内置函数&#xff1b;7、算术、赋值运算符等等。Python基础知…

Django开发1

Django开发1 初识Django1.安装django2.创建项目2.1 在终端2.2 Pycharm 3. 创建app4.快速上手4.1 再写一个页面4.2 templates模板4.3 静态文件4.3.1 static目录4.3.2 引用静态文件 5.模板语法//Django开发案例&#xff1a;联通新闻中心6.请求和响应案例&#xff1a;用户登录7.数…

编程式事务和声明式事物

编程式事务 声明式事物

【每日算法】基数排序算法

1&#xff09;算法简介 基数排序是一种非比较型整数排序算法&#xff0c;其原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。由于整数也可以表达字符串&#xff08;比如名字或日期&#xff09;和特定格式的浮点数&#xff0c;所以基数排序也不是只能使…

wincc 报警记录 mysql_如何才能把WINCC报警记录中的数据通过SQL取上来-工业支持中心-西门子中国...

回答者&#xff1a; 凌波微步- 高级工程师&nbsp&nbsp第11级2009-03-09 08:54:18您可以评论本回答&#xff0c;或直接点击“提交”按钮推荐本回答...我可以取出来&#xff0c;但显示不了。我显示时用的是ms listbox 2.0控件&#xff0c;不过没成功显示出来&#xff0c;多…

AES加密算法256位密钥与128位密钥的不同之处

一、指代不同 1、256位密钥&#xff1a;AES的区块长度固定为256位&#xff0c;密钥长度则可以是256。 2、128位密钥&#xff1a;AES的区块长度固定为128位&#xff0c;密钥长度则可以是128。 二、安全性不同 1、256位密钥&#xff1a;256位密钥安全性高于128位密钥。 2、1…

Linux LNMP 环境的搭建之【Nginx的安装】

Nginx 俄罗斯人开发的一款比较强劲的web服务器,静态页面html 单机在优化得当的情况下&#xff0c;能够达到3-4W的并发,是一款比较优秀的服务器软件,在国内,有Tengine【淘宝】开发的分支 ,关于Tengine的文档,可以参考,淘宝团队的官方文档&#xff1a;http://tengine.taobao.org/…

如何把map的value转为list_Java 8 将Map转换为List

将一个Java示例转换Map为List汇总&#xff1a;Map map new HashMap<>();// Convert all Map keys to a ListList result new ArrayList(map.keySet());// Convert all Map values to a ListList result2 new ArrayList(map.values());// Java 8, Convert all Map keys…

非对称加密和对称加密的区别

一 :概述 在现代密码学诞生以前&#xff0c;就已经有很多的加密方法了。例如&#xff0c;最古老的斯巴达加密棒&#xff0c;广泛应用于公元前7世纪的古希腊。16世纪意大利数学家卡尔达诺发明的栅格密码&#xff0c;基于单表代换的凯撒密码、猪圈密码&#xff0c;基于多表代换的…

PING检查网络是否畅通

可用于检测网络畅通情况 using System.Net;using System.Net.NetworkInformation;namespace PING{class Program{static void Main(string[] args){Console.WriteLine("请输入IP");string str Console.ReadLine();Console.WriteLine(ping(str));Console.ReadLine();…

linux安装mysql不成功怎么处理_Linux上安装MySQL时出现不兼容的解决办法

Linux上安装MySQL时出现不兼容的解决办法在linux 上安装mysql rpm的时候,安装不成功MySQL-client-5.5.36-1.linux2.6.x86_64.rpm MySQL-server-5.5.36-1.linux2.6.x86_64.rpm[rootbogon develop]# rpm -ivh MySQL-server-5.5.36-1.linux2.6.x86_64.rpm准备中… ###############…