zoukankan      html  css  js  c++  java
  • 事务管理的简单总结

    一、首先谈谈事务的分类

    1、声明式事务

       建立在AOP之上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需要在配置文件中做相关的事务规则声明(或通过基于@Transaction注解的方式),便可以将事务规则应用到业务逻辑中.

      其中,声明式事务的两种实现方式

       11、注解的实现方式,就是在方法上标注@transctional   

    @Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该注解来覆盖类级别的定义。

    虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。

       12、spring配置文件的方式,利用aop技术实现

     

     

      

    2、编程式事务

          简单的说就是在代码中需要直接加入处理事务的逻辑,可能需要在代码中显式调用begin Transaction() commit(). rollback() 等事务管理相关的方法,如在执行a方法的时候需要事务处理,你需要在a方法开始时候开启事务,处理完成之后,在方法结束的时候,关闭事务.

    二、事务的流程

    三、事务的隔离级别

           1、未提交读(容易尝试脏读的情况)

            2、读取提交(默认的一种方式,容易产生不可重复读),在显示的购买场景中,往往下单前看库存还有,当提交时就提示库存没有了

            3、可重复读(容易产生脏读)

            4、串行(可以避免脏读、幻读,但是效率很低)

    四、事务的传播行为

    Spring中的7个事务传播行为:

    PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务
    PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行
    PROPAGATION_MANDATORY 支持当前事务,假设当前没有事务,就抛出异常
    PROPAGATION_REQUIRES_NEW 新建事务,假设当前存在事务。把当前事务挂起
    PROPAGATION_NOT_SUPPORTED 以非事务方式运行操作。假设当前存在事务,就把当前事务挂起
    PROPAGATION_NEVER 以非事务方式运行,假设当前存在事务,则抛出异常
    PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

  • 相关阅读:
    iptables 增删查改
    在Ubuntu14.04上安装WordPress4搭建技术博客
    Revit 二次开发之 零件
    Revit 二次开发之 结构层次
    revit二次开发之 过滤器二FilteredElementCollector收集器
    Revit二次开发之 动态模型更新(DMU: Dynamic Model Update)功能
    revit二次开发之 过滤器一
    Revit 二次开发之标高参数
    Revit二次开发之 错误
    Visual Studio删除所有的注释和空行
  • 原文地址:https://www.cnblogs.com/jiazhutao/p/12762022.html
Copyright © 2011-2022 走看看