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

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/albertrui/p/8296315.html
Copyright © 2011-2022 走看看