zoukankan      html  css  js  c++  java
  • Spring框架之事务管理

    Spring框架之事务管理

    一、事务的作用

    • 将若干的数据库操作作为一个整体控制,一起成功或一起失败。
    • 原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
    • 一致性:指事务前后数据的完整性必须保持一致。
    • 隔离性:指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。
    • 持久性:指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即时数据库发生故障也不应该对其有任何影响。

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

    1.Platform TransactionManager 事务管理器(提交、回滚事务)
      Spring为不同的持久化框架提供了不同的Platform TransactionManager接口实现。如:

    • 使用Spring JDBC或iBatis进行持久化数据时使用DataSourceTransactionManager
    • 使用Hibernate3.0版本进行持久化数据时使用HibernateTransactionManager

    2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读)
      (1)事务隔离级别:(五种)

    • DEFAULT--使用后端数据库默认的隔离级别(Spring中的选择项)
    • READ_UNCOMMITED--允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读:①脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。②不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。③幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。
    • READ_COMMITTED--允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生
    • REPEATABLE_READ--对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生
    • SERIALIZABLE--完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的

       其中,MySQL默认采用REPEATABLE_READ隔离级别;Oracle默认采用READ_COMMITTED隔离级别

            (2)事务传播行为:(七种)

    • REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
    • SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
    • MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
    • REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
    • NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    • NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
    • NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。拥有多个可以回滚的保存点,内部回滚不会对外部事务产生影响。只对DataSourceTransactionManager有效

    3.TransactionStatus 事务具体运行状态

    三、Spring事务管理设计思想:

      

    四、案例分析:

      Java代码结构:

      代码见:https://github.com/AlbertRui/Spring/tree/master/spring_tx/src

         参考:http://blog.csdn.net/daijin888888/article/details/51822257

  • 相关阅读:
    linux 程序安装目录/opt目录和/usr/local目录的区别
    Linux文件目录结构详解
    Jenkins卸载方法(Windows/Linux/MacOS)
    Jmeter案例demo
    idea打包java可执行jar包
    查看端口状态
    轻松掌握mongodb
    sphinx和coreseek
    redis
    redis默认端口6379以其名命名,是我孤陋寡闻了,是名性感美女(梅尔兹)
  • 原文地址:https://www.cnblogs.com/albertrui/p/8296315.html
Copyright © 2011-2022 走看看