© 版权声明:本文为博主原创文章,转载请注明出处

1.什么是事务

  - 事务是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败

2.事务特性(ACID)

  - 1.原子性(Atomicity):指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

  - 2.一致性(Consistemcy):指事务前后数据的完整性必须保持一致

  - 3.隔离性(Isolation):指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离

  - 4.持久性(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响

3.Spring事务API

  Spring事务管理高层抽象主要包括3个接口

  - PlatformTransactionManager:事务管理器

  Spring为不同的持久化框架提供了不同的PlatformTransactionManager接口实现

  1)使用Spring JDBC或者iBatis进行数据持久化时使用DataSourceTransactionManager

  2)使用Hibernate进行数据持久化时使用HibernateTransactionManager

  3)使用JPA进行数据持久化时使用JpaTransactionManager

  4)使用Jdo进行数据持久化时使用JdoTransactionManager

  5)使用JTA进行数据持久化,在一个事务跨越多个资源时必须使用JtaTransactionManager

  - TransactionDefinition:事务定义信息(隔离、传播、超时、只读)

  不考虑隔离性可能出现的问题

  1)脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据回滚,则读到的数据是无效的

       eg:事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的

  2)不可重复读:是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据

          eg:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果

  3)幻读:一个事务读取了几行记录后,另一个事务插入一些数据,幻读就发生了。在后来的查询中,第一个事务就会发现有些原本没有的记录

       eg:事务T1对一个表中的全部数据进行了修改。同时,事务T2向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,

          就好象发生了幻觉一样

  不可重复和幻读的区别:

    结果:

    1)不可重复读的重点是修改:同样的条件, 你读取过的数据, 再次读取出来发现不一样了

    2)幻读的重点在于新增或者删除:同样的条件, 第1次和第2次读出来的记录数不一样

    控制:

    1)对于不可重复读, 只需要锁住满足条件的记录,就可避免

    2)对于幻读, 要对读取到的记录加锁 (记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入 (间隙锁),才可避免

  隔离级别

  - DEFAULT:使用后端数据库默认的隔离级别

  - READ_UNCOMMITTED:允许你读取还未提交的改变了的数据。可能导致脏读、幻读、不可重复读

  - READ_COMMITTED:允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生

  - REPEATABLE_READ:对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏读、不可重复读,但幻读仍可能发生

  - SERIALIZABLE:完全服从ACID的隔离级别,确保不发生脏读、幻读、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的

  注:MySQL默认采用REPEATABLE_READ    ORACLE默认采用READ_COMMITTED

  事务传播行为:解决业务层方法之间的相互调用的问题

  - PROPAGATION_REQUIRED:支持当前事务,不存在就创建一个

  - PROPAGATION_SUPPORTS:支持当前事务,不存在就不使用事务

  - PROPAGATION_MANDATORY:支持当前事务,不存在就抛出异常

  - PROPAGATION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务

  - PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务

  - PROPAGATION_NEVER:以非事务方式运行,如果有事务存在,抛出异常

  - PROPAGATION_NESTED:如果当前事务存在,则嵌套事务执行

4.Spring的两种事务管理

  - 编程式事务管理

  1)实际应用中比较少用

  2)通过TransactionTemplate手动管理事务

  - 声明式事务管理

  1)推荐使用(代码侵入性最小)

  2)Spring的声明式事务是通过AOP实现的

参考:http://www.imooc.com/learn/478

     http://bbs.csdn.net/topics/120024254

Spring事务管理简介的更多相关文章

  1. Spring事务管理——其他的事务属性

    之前我们说过Spring事务管理中的事务的传播行为的属性.下面我们来说一下它的其他属性. 一.事务的隔离级别 1 .数据库事务并发问题.假设现在有两个事务:Transaction01和Transact ...

  2. Spring 事务管理案例

    事务管理简介   Spring 事务管理有两种方式:一种是编程式事务管理,即通过编写代码实现事物管理,包括定义事务的开始,程序正常执行后的事物提交,异常时进行的事务回滚.另一种是基于AOP技术实现的声 ...

  3. Spring---AOP注解开发&jdbc模板&Spring事务管理

    一.AOP注解开发 此处需要回忆一遍AOP的概念.简单的来说,AOP就是利用动态代理技术,做到不触动源代码但却扩展了功能.那么就需要一个被扩展的对象和一个“新的功能”,例如说给某类的saveUser方 ...

  4. Spring事务管理----------整合学习版

    作者:学无先后 达者为先 Spring提供了一流的事务管理.在Spring中可以支持声明式事务和编程式事务. 一  spring简介 1 Spring的事务       事务管理在应用程序中起着至关重 ...

  5. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  6. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  7. spring事务管理器设计思想(一)

    在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...

  8. 事务管理(下) 配置spring事务管理的几种方式(声明式事务)

    配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...

  9. Spring事务管理器的应对

    Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...

随机推荐

  1. PHP将两个二维数组合并为一个二维数组的方法

    $a = array(0 => Array(id => 66,class_name => math),1 => Array(id => 67,class_name =&g ...

  2. codebolcks设置自动补全[转]

    熟悉使用一些开发类IDE的朋友对代码自动补全一定印象深刻,如Visual studio,eclipse等,我们在程序中定义的那一个个超长的变量函数名只需打出几个字母就可自动补全,但是在codebloc ...

  3. 牛客小白月赛6 指纹锁(set容器的骚操作)

    原题地址: 题目描述     HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁.     该指纹锁的加密算法会把一个指纹转化为一个不超过1e7的数字,两个指纹数值之差越小,就说 ...

  4. Apache优化建议

    Apache是Web服务器软件,它最常见是搭配PHP开发语言去使用.今天,小编根据Apache官方手册再结合实际,整理出下面这些优化建议,希望对大家的Apache服务器的运行效率有效果. 1.控制Ma ...

  5. jcl sort comp3 to 表示型

    Lets say your packed data is at 10th column and is of length 6, S9(4)V99 You could try the following ...

  6. OC语言基础之利用property优化封装

    1.property功能用法 1: // @property:可以自动生成某个成员变量的setter和getter声明 2: @property int age;//可以直接免去变量的声明 3: // ...

  7. VMware给虚拟机绑定物理网卡

    前言: 桥接模式:就是使用真实的IP地址 NAT模式:使用以VMnet 8所指定的子网中分配的IP地址,在外网信息交互中不存在这样的IP. 仅主机模式:仅用于虚拟机与真机之间的信息交互. 操作步骤: ...

  8. HTTP抓包工具Fiddler

    http://blog.csdn.net/kobejayandy/article/details/16908261

  9. Ubifs Support

    参考:http://processors.wiki.ti.com/index.php/UBIFS_Support#Creating_UBIFS_file_system UBIFS UBIFS may ...

  10. 使用PM2守护Nodejs命令行程序

    介绍 pm2是nodejs的一个带有负载均衡功能的应用进程管理器的模块,类似有Supervisor,forever,用来进行进程管理. 一.安装: <pre>npm install pm2 ...