zoukankan      html  css  js  c++  java
  • Spring事务的传播行为和隔离级别

    事物注解方式: @Transactional

    【一】传播行为:

    使用方法:@Transactional(propagation=Propagation.REQUIRED) 

    Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的;

    Supports:支持当前事务,如果当前没有事务,就以非事务方式执行;

    Mandatory:支持当前事务,如果当前没有事务,就抛出异常;

    RequiresNew:新建事务,如果当前存在事务,把当前事务挂起,先执行新的在执行旧的;

    NotSupported:容器不为这个方法开启事务。

    Never:以非事务方式执行,如果当前存在事务,则抛出异常。

    Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。

    【二】隔离级别:

    先上一张图:

      

    1、事务的隔离级别:是为了使你在性能与数据的有效性之间做一个平衡,不是说级别越高越好,只有合适才是最好的。

      多用于处理多事务的并发问题,并行可以提高数据库的吞吐量和效率。

         使用方法:@Transactional(isolation = Isolation.SERIALIZABLE)

      Serializable(串行化 )。最严格的级别,事务串行执行,资源消耗最大;

      Repeatable Read(可重复读)。

      Read Committed(读取已提交数据)。大多数主流数据库的默认事务等级

      Read Uncommitted(读取未提交数据)。

    相关概念:

      脏读 : 一个事务读取到另一事务未提交的更新数据

      不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据。

      可重复读:在同一事务中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据。

      幻读 : 一个事务读到另一个事务已提交的insert数据

  • 相关阅读:
    GDC2017:Framegraph-extensible-rendering-architecture-in-frostbite
    17072802(UE4的批量Import)
    16011301(统计指令数影响耗时)
    16080401(面向摄像机的Instance模型)
    UE4编译_201701
    17020701(AnimDynamic继续)
    Python过滤utf8mb4无效字符
    Windows下安装MySQL-python
    使用Pycharm更新Github项目(到源项目)
    python异常:error: command 'gcc' failed: No such file or directory
  • 原文地址:https://www.cnblogs.com/start-fxw/p/7026324.html
Copyright © 2011-2022 走看看