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类似的操作。

  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/jiazhutao/p/12762022.html
Copyright © 2011-2022 走看看