一、事务传播属性(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事务传播简介的更多相关文章

  1. spring事务传播机制实例讲解

    http://kingj.iteye.com/blog/1680350   spring事务传播机制实例讲解 博客分类:   spring java历险     天温习spring的事务处理机制,总结 ...

  2. Spring事务传播机制

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务 ...

  3. Spring事务传播特性的浅析——事务方法嵌套调用的迷茫

    Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务.结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷. 其实这 ...

  4. Spring事务传播机制和数据库隔离级别

    Spring事务传播机制和数据库隔离级别 转载 2010年06月26日 10:52:00 标签: spring / 数据库 / exception / token / transactions / s ...

  5. spring 事务传播机制

    spring 事务 传播机制 描述的 事务方法直接相互调用,父子事物开启,挂起,回滚 等的处理方式. 绿色的 那几个 我认为比较重要. 1 , @Transactional(propagation=P ...

  6. 事务、事务特性、事务隔离级别、spring事务传播特性

    事务.事务特性.事务隔离级别.spring事务传播特性   1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功, ...

  7. 什么是事务、事务特性、事务隔离级别、spring事务传播特性

    1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(At ...

  8. spring事务传播实现源码分析

    转载. https://blog.csdn.net/qpfjalzm123/article/details/83717367 本文只是对spring事务传播实现的流程进行简单的分析,如有不对之处请指出 ...

  9. Spring事务传播属性介绍(二).mandatory、not_supported、never、supports

    Required.Required_New传播属性分析传送门:https://www.cnblogs.com/lvbinbin2yujie/p/10259897.html Nested传播属性分析传送 ...

随机推荐

  1. Java--剑指offer(3)

    11.输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. a)使用Integer.toBinaryString(n);来计算得出二进制的字符串,然后使用for循环截取字符串是否为1 pu ...

  2. android-之测试框架的使用AndroidTestCase

    Android Manifest.xml中所需要添加的配置 <instrumentation android:name="android.test.InstrumentationTes ...

  3. [转]用jpa创建web项目,报错:No persistence units parsed from {classpath*:META-INF/persistence.xml}

    原文地址:http://blog.sina.com.cn/s/blog_6826662b01015opk.html 最近做一个web项目用到了Spring+JPA,由于没有正确配置persistenc ...

  4. swift中的结构体和枚举

    Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...

  5. selenium+eclispse里代码备注

    1.火狐.谷歌和IE浏览器引擎都要重新下载selenium官网引擎,并设置路径才可以支持selenium3 而狐火用自己的引擎不用设置路径既可以支持selenium2也支持selenium3,谷歌和I ...

  6. Vim快速移动光标至行首和行尾

    1. 需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首.除此之外,也可以在命令模式中使用快捷键"^"(即Shift+6)或0(数字0). 2. ...

  7. 【HDU 1150】Machine Schedule(二分图匹配)

    机器的不同模式为点,对于每个job,建两条边 A机器需要的模式<->B机器需要的模式. 问题转化为最小点覆盖,然后用二分图的最小点覆盖==最大匹配,用匈牙利算法解. #include &l ...

  8. Struts2+Spring+Mybatis+Junit 测试

    Struts2+Spring+Mybatis+Junit 测试 博客分类: HtmlUnit Junit Spring 测试 Mybatis  package com.action.kioskmoni ...

  9. 用 phylomatic 软件生成的进化树

    用 phylomatic 软件生成的进化树 Phylomatic是在线软件,可以利用植物名录,按照APGIII的被子植物科的拓扑结构,生成进化树. 参考 张金龙博士 工作目录 setwd(" ...

  10. php发送http put/patch/delete请求

    今天学RESTful API的编写,发现不知道怎么发送HTTP PUT/PATCH/DELETE请求,还是要学习一个. 使用curl_opt函数来发送各式各样的http请求动作,不仅限于get和pos ...