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]LeetCode415. 字符串相加 | Add Strings
Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2 ...
- [Swift]LeetCode419. 甲板上的战舰 | Battleships in a Board
Given an 2D board, count how many battleships are in it. The battleships are represented with 'X's, ...
- [Swift]LeetCode812. 最大三角形面积 | Largest Triangle Area
You have a list of points in the plane. Return the area of the largest triangle that can be formed b ...
- [Swift]LeetCode973. 最接近原点的 K 个点 | K Closest Points to Origin
We have a list of points on the plane. Find the K closest points to the origin (0, 0). (Here, the d ...
- 四则运算4(Android版)
队员:王楗 http://home.cnblogs.com/u/wangjianly/ 结组照:
- SpringBoot入门教程(十七)@Service、@Controller、@Repository、@Component
spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...
- IntelliJ IDEA 导入新项目
在现有的idea中close project 关闭当前项目, 然后import project
- xxl-job入门实践
源码在码云上(git@gitee.com:lynch168/spring-boot.git) 1.下载xxl-job源码 xxl-job源码地址:https://github.com/xuxueli/ ...
- MySQL8.0.12 安装及配置、读写分离,主从复制
一.安装 1.从网上下载MySQL8.0.12版本,下载地址:https://dev.mysql.com/downloads/mysql/ 2. 下载完成后解压 我解压的路径是:D:\Java\mys ...
- 附实例!图解React的生命周期及执行顺序
本文由云+社区发表 作者:前端林子 1.七个可选的生命周期 可以结合下图来看: (1) componentWillMount() 仅在render()方法前被调用一次,如果在该方法中调用了setSta ...