Spring事务传播机制

一、事务的定义和ACID特性

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据的一个程序执行单元(unit)。事务(Transaction)是访问并可能更新数据库中各种数据的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

概念

例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

特性

事务是恢复和并发控制的基本单位。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的所有操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

二、JDBC事务

在没有引入SPRING之前,我们只能采用编程方式进行事务控制。

Class.forName(driver);  
con = DriverManager.getConnection(dburl,name,password);  
try {  
    conn.setAutoCommit(false);  //将自动提交设置为false
/**
    con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//最底级别:只保证不会读到非法数据,上述3个问题有可能发生 
    con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //默认级别:可以防止脏读 
    con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//可以防止脏读和不可重复读取 
    con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //最高级别:防止上述3种情况,事务串行执行         
**/
    //执行一系列CRUD操作 
    conn.commit();      //当操作成功后手动提交  
} catch (Exception e) {  
    conn.rollback();    //一旦其中任何一个操作出错都将所有操作回滚
    e.printStackTrace();  
} finally {
    conn.colse();
}

三、SPRING事务

http://blog.csdn.net/donggua3694857/article/details/69858827
http://www.mamicode.com/info-detail-1248286.html

传播属性,详细区别在第二篇文章

并发事务引起的问题

在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务。并发虽然是必须的,但可能会导致以下的问题。
脏读(Dirty reads)——脏读发生在一个事务读取了另一个事务改写但尚未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。
不可重复读(Nonrepeatable read)——不可重复读发生在一个事务执行相同的查询两次或两次以上,但是每次都得到不同的数据时。这通常是因为另一个并发事务在两次查询期间进行了更新。
幻读(Phantom read)——幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录。


隔离级别

面试必备技能:JDK动态代理给Spring事务埋下的坑!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 很多人喜欢这篇文章,特此同步过来 由浅入深谈论spring事务 前言 这篇其实也要归纳到《常识》系列中,但这重点又...
    码农戏码阅读 10,208评论 2 59
  • 1. 关于事务 事务控制就是将一系列操作当成一个不可拆分的逻辑单元,保证这些操作要么都成功,要么都失败。在关系数据...
    七弦桐语阅读 7,915评论 0 14
  • 目前JavaWeb系统的框架容器基本都是使用Spring管理的,其中事务管理也是比较重要的,之前也是看过,网上介绍...
    wiliam_wiliam阅读 3,550评论 0 0
  • 睡梦中被人吵醒,压抑难捱,汹涌澎湃,默念十遍:一切打扰别人睡觉的行为都是原罪,然后拿出我的小本做我的事情。有的人天...
    十四颗牙阅读 2,206评论 0 0
  • 文 谢西九 桃夭诗经 国风 周南桃之夭夭,灼灼其华。之子于归,宜其室家。桃之夭夭,有蕡其实。之子于归,宜其家室。桃...
    谢西九阅读 7,077评论 17 76