• 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数据

  • 相关阅读:
    python、Java、大数据和Android的薪资如何?
    php最新版本配置mysqli
    使用Python3爬虫抓取网页来下载小说
    pygame事件之——控制物体(飞机)的移动
    用javascript做别踩白块游戏2
    用javascript做别踩白块游戏1
    select、poll、epoll之间的区别总结(IO同、异步、(非)阻塞)----内核态、用户态
    元类
    python大神-javascript知识
    python大神-html知识
  • 原文地址:https://www.cnblogs.com/start-fxw/p/7026324.html
Copyright © 2020-2023  润新知