Spring 框架中对于事物的管理,主要定义了一下四种属性:

  • 事物的隔离(Isolation)级别
  • 事物的传播行为(Propagation Behavior)
  • 事物的超时时间(TImeout)
  • 是否为只读(ReadOnly)

事物的隔离级别又有以下5个常量用于标志可供选择的隔离级别:

  • ISOLATION_DEFAULT:如果指定隔离级别为 ISOLATION_DEFAULT,则表示使用数据库默认的隔离级别,通常情况下是 Read Committed。
  • ISOLATION_READ_UNCOMMITTED:对应 Read Uncommitted 隔离级别,无法避免脏读,不可重复读和幻读。
  • ISOLATION_READ_COMMITTED:对应 Read Committed 隔离级别,可以避免脏读,但无法避免可重复读和幻读。
  • ISOLATION_REPEATABLE_READ:对应 Repeatable Read 隔离级别,可以避免脏读和不可重复读,但不能避免幻读。
  • ISOLATION_SERIALIZABLE:对应 Serialization 隔离级别,可以避免所有的脏读,不可重复读以及幻读,但并发性效率最低。

事物的传播行为,有以下7种:

  • PROPAGETION_REQUIRED:如果当前存在一个事务,则加入当前事务。如果不存在任何事务,则创建一个新的事务。总之,要至少保证在一个事务中运行。Required 通常作为默认的事务传播行为。
  • PROPAGETION_SUPPORTS:如果当前存在一个事务,则加入当前事务。如果当前不存在事务,则直接执行。对于一些查询方法来说,那么不需要事务的支持。如果当前方法被其他方法调用,而其他方法启动了一个事务,使用 Supports 可以保证当前方法能够加入当前事务,并洞察当前事务对数据资源所做的更新。
  • PROPAGETION_MANDATORY:mandatory 强制要求当前存在一个事务,如果不存在,则抛出异常。如果某个方法需要事务支持,但自身又不管理事务提交或者回滚,那么比较适合使用 mandatory。
  • PROPAGETION_REQUIRES_NEW:不管当前是否存在事务,都会创建新的事务。如果当前存在事务,会将当前事务挂起(Suspend)。如果某个业务对象所做的事务不想影响到外层事务, requires_new 应该是合适的选择。比如,假设当前的事务方法需要向数据库中更新写日志信息,但是指这些日志信息更新失败,我们也不想因为该业务方法的事务回滚,而影响到外层事务的成功提交。因为这种情况下,当前业务方法的事务成功与否对外层事务来说无关紧要。
  • PROPAGETION_NOT_SUPPORTED:不支持当前事务,而是在没有事务的情况下执行。如果当前存在事务的话,当前事务原则上将被挂起(Suspend)。
  • PROPAGETION_NEVER:永远不需要当前存在事务,如果存在事务,则抛出异常。
  • PEOPAGETION_NESTED:如果存在当前事务,则在当前事务的一个嵌套事务中执行,否则与 PROPAGETION_REQUIRED 的行为类似,即创建新的事务,在新创建的事务中执行。Nested 粗看起来好像与 PROPAGETION_REQUIRES_NEW 创建的新事务与外层事务属于同一个 “档次”,即二者的地位是相同的。当新创建的事务运行的时候,外层事务将被暂时挂起。而 Nested 创建的嵌套事务则不然,它是寄生于当前外层事务的,它的地位比当前外层事务的地位要小一号。当内部嵌套事务运行的时候,外层事务也是出于 active 状态,如下图涉及的多个事务相互之间的地位。

注意:

1. REQUIRES_NEW 传播行为中,外层事务抛出异常,不会影响内部事务。外部事务的异常会影响外层事务。

2. MyBatis 不支持 NESTED 传播行为,最好不使用。

Spring 事物隔离级别,事物传播行为的更多相关文章

  1. Spring事务隔离级别和传播特性

    相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲, 一天电话里有人问我声明式事务隔离级别有哪几种, 我就回答了7种, 他问我Spring ...

  2. Spring事务隔离级别和传播特性(转)

    相信每个人都被问过无数次Spring声明式事务的隔离级别和传播机制吧!今天我也来说说这两个东西. 加入一个小插曲,一天电话里有人问我声明式事务隔离级别有哪几种,我就回答了7种,他问我Spring的版本 ...

  3. Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理

    原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...

  4. spring事务隔离级别、传播机制以及简单配置

    转自 https://blog.csdn.net/zht741322694/article/details/78676964 一.spring支持的事务声明方式1.  编程式事务  当系统需要明确的, ...

  5. Spring事务隔离级别和传播性

    事务的隔离级别也分为四种: read uncommited(读未提交). read commited(读提交). read repeatable(读重复). serializable(序列化), 这四 ...

  6. spring事物传播机制 事物隔离级别

    Spring事务类型详解: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择. PROPAGATION_SUPPORTS--支持当前事务,如 ...

  7. Spring事物隔离级别及事物传播行为@Transactional实现

    阅读本篇文章前,请先阅读如下文章: 四种事物隔离级别详解 先看下@Transactional可以配制那些参数及以其所代表的意义. isolation 枚举org.springframework.tra ...

  8. SQL事物隔离级别

    标准SQL定义了4个隔离级别 Read uncommitted 未提交读 Read committed 已提交读 Repeatable read 可重复读 Serializable 可序列化 基本语法 ...

  9. 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

    1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...

  10. 浅谈Spring的事务隔离级别与传播性

    浅谈Spring的事务隔离级别与传播性 这篇文章以一个问题开始,如果你知道答案的话就可以跳过不看啦@(o・ェ・)@ Q:在一个批量任务执行的过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚 ...

随机推荐

  1. Java学习:注解简介

    JAVA 注解的基本原理 以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高. 于是就有人提出来一种标记 ...

  2. Docker File

  3. nginx dockerfile安装第三方模块

    # nginx Dockerfile # Version 1.0 # author fendo # Base images 基础镜像 FROM centos:centos7 #FROM hub.c.. ...

  4. Web API 2 的操作结果

    这是msdn原文文档!明天用,留存. Web API 控制器操作可以返回以下任何内容: void HttpResponseMessage IHttpActionResult 其他类型 根据返回的这种情 ...

  5. iTextSharp生成pdf含模板(二)---C#代码部分

    参考地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html 一.先在程序中使用Nuget安装iTextSharp(我是创建的控制台程序) 二. ...

  6. python 进程和线程-简介及进程

    进程和线程的关系及应用 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376 多任务: 什么叫“多任务”呢?简 ...

  7. Python渗透测试工具库

    漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...

  8. App过大

    最近开发中遇到一个报错信息 如下 Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex li ...

  9. elasticsearch安装中文分词器插件smartcn

    原文:http://blog.java1234.com/blog/articles/373.html elasticsearch安装中文分词器插件smartcn elasticsearch默认分词器比 ...

  10. Angular----样式

    本篇根据Angular官网提供的例子,对Angular涉及到的样式绑定进行说明. 一.提供的CSS样式 .red{ color:red; } .green{ color: green; } .yell ...