Spring事务传播简介
一、事务传播属性(propagation)
1、REQUIRED,默认属性
此级别下,会为每一个调用的方法创建一个逻辑事务域,如果前面的方法已经创建了事务,那么后面的方法支持当前事务,如果当前没有事务,会重新建立事务
2、MANDATORY(务必的)
支持当前事务,如果没有则抛异常
3、NEVER
非事务执行,如果有事务则抛异常
4、NOT_SUPPORTED
非事务操作,如果有事务则挂起
5、REQUIRES_NEW
新建事务,如果当前存在事务则挂起当前
6、SUPPORTS
支持当前事务,如果没有当前事务,则以非事务方式执行
7、NESTED(镶嵌)
支持当前事务,新增SavePoint点,与当前事务同步提交或回滚。
嵌套事务就是内层事务依赖于外层事务,外层事务失败,回滚内外层事务,内层事务失败,不影响外层事务
二、事务隔离级别(Isolation Level)
事务并发引起的三种情况
1、Dirty Reads 脏读
一个事务对数据进行更新操作还未提交,另一个事务也来操作这个未提交数据,如果第一个事务操作失败,数据回滚了,而第二个事务用了未提交的数据,也就是用了错误数据,就造成了脏读
如果第一个事务向数据库插入一条数据,还有后期操作所以没有提交,第二个事务在第一个事务没提交的情况下读取了第一个事务插入的数据,如果第一个事务后期操作出问题了,那么数据回滚,这导致第二个事务取错了数据,也就是脏读
2、Non-Repeatable Reads 不可重复读
一个事务要多次读取同一数据,该事务还未结束时,另一个事务就对那个数据做了修改,那么第一个事务本该读到的是同样数据,被第二个事务修改后就多到的不同了,造成不可重复读
3、Phantom Reads 幻读
第一个事务在查询符合某条件数据时,此时另一事务插入一条符合条件的新数据,第一个事务就感觉莫名多了一条,仿佛出现幻觉,就叫幻读
4、不可重复读和幻读区别:
不可重复读是在同一事物中多次查询,而过程中其他事物对数据做了修改或删除,返回不同的结果
幻读在同一事物中多次查询,而过程中其他事物做了插入操作,得到不同结果
表面上看区别是不可重复读是其他事务对数据修改或删除造成的问题,幻读是其他事务对数据进行插入造成的问题
五种隔离级别
1、DEFAULT 默认
使用的是数据库默认设置的隔离级别,依赖于数据库事务
2、READ_UNCOMMITTED 读未提交
事务最低隔离级别,允许另外事务可以看到未提交数据,容易造成脏读、不可重复读和幻读
3、READ_COMMITTED 读已提交
保证已修改的数据提交后才能被另外事务读取到,另外事务不能读取未提交数据,避免了脏读,不可避免不可重复读和幻读
4、REPEATABLE_READ 可重复读
防止脏读和不可重复读,可能出现幻读
5、SERIALIZABLE 串行化
花费代价最高,事务被处理为顺序执行,脏读、不可重复读、幻读均可避免
Spring事务传播简介的更多相关文章
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- Spring事务传播机制
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...
- Spring事务传播特性的浅析——事务方法嵌套调用的迷茫
Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...
- Spring事务传播机制和数据库隔离级别
Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...
- spring 事务传播机制
spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...
- 事务、事务特性、事务隔离级别、spring事务传播特性
事务.事务特性.事务隔离级别.spring事务传播特性 1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...
- 什么是事务、事务特性、事务隔离级别、spring事务传播特性
1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...
- spring事务传播实现源码分析
转载. https://blog.csdn.net/qpfjalzm123/article/details/83717367 本文只是对spring事务传播实现的流程进行简单的分析,如有不对之处请指出 ...
- Spring事务传播属性介绍(二).mandatory、not_supported、never、supports
Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Nested传播属性分析传送 ...
随机推荐
- linux基础-第十四单元 Linux网络原理及基础设置
第十四单元 Linux网络原理及基础设置 三种网卡模式图 使用ifconfig命令来维护网络 ifconfig命令的功能 ifconfig命令的用法举例 使用ifup和ifdown命令启动和停止网卡 ...
- Linux开机后 systemd 自动启动 ceph osd mon进程
机房操作失误导致机架或主机掉电是偶尔发生的事情,那么怎么在这种情况下,让Ceph服务随OS启动而快速启动呢 ? 如下是一个简单方法: 在OSD主机上执行如下命令: sudo ln -s /usr/li ...
- [转]扩展RBAC用户角色权限设计方案
原文地址:http://www.iteye.com/topic/930648 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地 ...
- Java设计模式(五) 工厂模式
1,定义抽象产品类 package com.pattern.factory; import java.util.ArrayList; public abstract class Pizza { Str ...
- PHP输出一个指定范围内的随机数
<?php echo mt_rand(5, 15); ?>
- css 选择器样式优先级
!important > 行内 >id > class >tag >*
- list 集合
1.Model public class ROLE_FUNCTION { //角色集合 public List< ROLE> ROLES { get; set; } //角色权限集合 pu ...
- 【hdu 5918】Sequence I(KMP)
给定两个数字序列,求a序列中每隔p个构成的p+1个序列中共能匹配多少个b序列. 例如1 1 2 2 3 3 每隔1个的序列有两个1 2 3 kmp,匹配时每次主串往前p个,枚举1到p为起点. 题目 # ...
- AfNetworking 3.0源码解读
做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...
- python3 连接SQLserver
pymssql 是Python语言用来连接微软 SQL SERVER 数据库的类库,实现了 Python DB API 2.0 .官网介绍. 最简事例: #!/usr/bin/env python # ...