Spring 事务与脏读、不可重复读、幻读
索引:
参看代码 GitHub:
2.事务行为
一、Spring 事务:
Spring 的事务机制是用统一的机制来处理不同数据访问技术的事务处理。
Spring 的事务机制提供了一个 PlatformTransactionManager 接口,不同的数据访问技术的事务使用不同的接口实现:
JDBC -- DataSourceTransactionManager
JPA -- JpaTransactionManager
Hibernate -- HibernateTransactionManager
JDO -- JdoTransactionManager
分布式事务 -- JtaTransactionManager
二、事务行为
@Transactional 的属性可以定制事务的行为:
.propagation--定义事务的生命周期
默认值--Propagation.REQUIRED
Propagation.REQUIRED--方法A调用时没有事务新建一个事务,
当方法A调用另外一个方法B时,方法B将使用相同的事务,
如果此时方法B发生异常数据回滚的时候,整个事务将回滚。
Propagation.REQUIRES_NEW--对于方法A和B,
在方法调用的时候无论是否有事务存在都开启一个新的事务,
如果方法B有异常不会导致A方法的回滚。
Propagation.NESTED--与Propagation.REQUIRES_NEW相同,
支持JDBC,不支持JPA和Hibernate。
Propagation.SUPPORTS--方法调用时,有事务就用事务,没有就不用。
Propagation.NOT_SUPPORTED--强制方法不在事务中执行,
若有事务,在方法调用时,事务会先被挂起。
Propagation.NEVER--强制方法不在事务中执行,若有事务则抛出异常。
Propagation.MANDATORY--强制方法在事务中执行,若无事务则抛出异常。
.isolation--隔离决定事务的完整性,可以设置多事务对相同数据下的处理机制
默认值--Isolation.DEFAULT
Isolation.READ_UNCOMMITTED--对于在A事务里修改了一条记录但没有提交事务,
在B事务可以读取到修改后的记录,
可能导致脏读、不可重复读、以及幻读。
Isolation.READ_COMMITTED--只有当在A事务里修改了一条记录且提交事务之后,
B事务才可以读取到提交后的记录,
阻止脏读,但可能导致不可重复读和幻读。
Isolation.REPEATABLE_READ--具有Isolation.READ_COMMITTED的功能,
并且当A事务读取一条记录时,B事务将不能修改这条记录了,
阻止脏读、不可重复读,但可能导致幻读。
Isolation.SERIALIZABLE--此级别下事务是顺序执行的,可阻止脏读、不可重复读、幻读,但开销较大。
Isolation.DEFAULT--使用当前数据库的默认隔离级别,
Oracle--READ_COMMITTED
SqlServer--READ_COMMITTED
MySQL--REPEATABLE_READ
.timeout--事务过期时间,默认当前数据库事务的过期时间
.readOnly--指定当前事务是否是只读事务,默认 false
.rollbackFor--指定哪些异常引起事务回滚,
源码-- Class<? extends Throwable>[] rollbackFor() default {};
.noRollbackFor--指定哪些异常不引起事务回滚,
源码-- Class<? extends Throwable>[] noRollbackFor() default {};
蒙
2018-05-03 16:29 周四
2018-05-11 22:41 周五
Spring 事务与脏读、不可重复读、幻读的更多相关文章
- 数据库事务隔离级别 - 分析脏读 & 不可重复读 & 幻读
一 数据库事务的隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这 ...
- spring事务隔离级别以及脏读 不可重复读 幻影读
隔离级别 声明式事务的第二个方面是隔离级别.隔离级别定义一个事务可能受其他并发事务活动活动影响的程度.另一种考虑一个事务的隔离级别的方式,是把它想象为那个事务对于事物处理数据的自私程度. 在一个典型的 ...
- Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...
1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback 回滚事务 •Commit ...
- MYSQL事件隔离级别以及复读,幻读,脏读的理解
一.mysql事件隔离级别 1未提交读(READUNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)( 隔离级别最低,并发性能高 ) 2 ...
- [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?
Server version: 5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...
- mysql中事务隔离级别可重复读说明
mysql中InnoDB引擎默认为可重复读的(REPEATABLE READ).修改隔离级别的方法,你可以在my.inf文件的[mysqld]中配置: transaction-isolation = ...
- MySQL事务(脏读、不可重复读、幻读)
1. 什么是事务? 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再分割的操作集合(工作逻辑单元): ...
- Mysql事务,并发问题,锁机制-- 幻读、不可重复读--专题
1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...
- spring 事务传播特性 和隔离级别
事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...
随机推荐
- [Swift]LeetCode247.对称数 II $ Strobogrammatic Number II
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside ...
- [Swift]LeetCode378. 有序矩阵中第K小的元素 | Kth Smallest Element in a Sorted Matrix
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- [Swift]LeetCode474. 一和零 | Ones and Zeroes
In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...
- [Swift]LeetCode623. 在二叉树中增加一行 | Add One Row to Tree
Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...
- Underscore.js 源码学习笔记(上)
版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}()); 这样的东西,我们应该知道这是一个 IIFE(立即执行 ...
- Python数据分析(一): ipython 技巧!
不一定非得使用Jupyter Notebook,试试ipython命令行 安装 ipython 我只试过Windows 10环境下的. 1.安装python安装包之后,应该就有ipython了. 2. ...
- 自定义圆形的ProgressBar
1.自定义圆形的ProgressBar 效果图: 圆形ProgressBar的样式主要有以下几个,我们这里以progressBarStyleLarge为例进行样式的修改,其他的类似. <Prog ...
- Spring Boot Security
如图,是一种通用的用户权限模型.一般情况下会有5张表,分别是:用户表,角色表,权限表,用户角色关系表,角色权限对应表. 一般,资源分配时是基于角色的(即,资源访问权限赋给角色,用户通过角色进而拥有权限 ...
- 2016年,总结篇 续 如何从 JQ 转到 VueJS 开发(一)
接着 2016 年的总结,我们来看看 2016年 国内最火且没有之一的前端MVVM 框架 VueJs 虽然 到写文章的这个时间点,VueJs已经发布了 2.1.x 了, 但是对于很多 Vuejs 的初 ...
- PHP_D4_“简易聊天室 ”的具体技术实现
上面已经介绍了系统的关键技术,下面对具体实现进行详解: 1.开发时,经常需要利用一个配置文件来存储系统的参数,例如:数据库连接信息等.这样可以提高系统的可移植性,当系统的配置发生变化时,例如:更改服务 ...