索引:

目录索引

参看代码 GitHub:

1.Spring 事务

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 事务与脏读、不可重复读、幻读的更多相关文章

  1. 数据库事务隔离级别 - 分析脏读 & 不可重复读 & 幻读

    一 数据库事务的隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这 ...

  2. spring事务隔离级别以及脏读 不可重复读 幻影读

    隔离级别 声明式事务的第二个方面是隔离级别.隔离级别定义一个事务可能受其他并发事务活动活动影响的程度.另一种考虑一个事务的隔离级别的方式,是把它想象为那个事务对于事物处理数据的自私程度. 在一个典型的 ...

  3. Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...

    1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback  回滚事务 •Commit ...

  4. MYSQL事件隔离级别以及复读,幻读,脏读的理解

    一.mysql事件隔离级别 1未提交读(READUNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)( 隔离级别最低,并发性能高 ) 2 ...

  5. [原创]MySQL RR隔离级别下begin或start transaction开启事务后的可重复读?

    Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: 我们知道MySQL的RR(repeatable read)隔 ...

  6. mysql中事务隔离级别可重复读说明

    mysql中InnoDB引擎默认为可重复读的(REPEATABLE READ).修改隔离级别的方法,你可以在my.inf文件的[mysqld]中配置: transaction-isolation = ...

  7. MySQL事务(脏读、不可重复读、幻读)

    1. 什么是事务? 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再分割的操作集合(工作逻辑单元): ...

  8. Mysql事务,并发问题,锁机制-- 幻读、不可重复读--专题

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  9. spring 事务传播特性 和隔离级别

    事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...

随机推荐

  1. [Swift]LeetCode341. 压平嵌套链表迭代器 | Flatten Nested List Iterator

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  2. Python内置函数(8)——bytes

    英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an immutable ...

  3. Java:多态乃幸福本源

    01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声 ...

  4. JVM基础系列第1讲:Java 语言的前世今生

    Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大.虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统.大到国际电商巨头阿 ...

  5. 死磕 java集合之WeakHashMap源码分析

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时 ...

  6. 【java设计模式】(3)---代理模式(案例解析)

    设计模式之代理模式 一.概述 1.什么是代理模式? 解释第一遍:代理模式主要由三个元素共同构成: 1)一个接口,接口中的方法是要真正去实现的. 2)被代理类,实现上述接口,这是真正去执行接口中方法的类 ...

  7. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  8. Asp.Net SignalR 集线器不使用代理的实现

    不使用生成代理JS的实现 可能有同学会觉得使用集线器很麻烦,要么引入虚拟目录,要么在生成期间生成js文件,再引入js文件进行开发.难道就没有比较清爽的方式吗?这个当然是有的,先不要(。・∀・)ノ゙嗨皮 ...

  9. leetcode — flatten-binary-tree-to-linked-list

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  10. leetcode — reverse-linked-list-ii

    /** * Source : https://oj.leetcode.com/problems/reverse-linked-list-ii/ * * * Reverse a linked list ...