以下是每种事务类型的作用、代码示例和对代码的解释:

  1. PROPAGATION_REQUIRED(默认):

    • 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则创建一个新的事务。适用于大多数业务场景,确保方法在事务中执行,如果没有事务,则创建一个新的事务。
    • 代码示例:
      @Transactional(propagation = Propagation.REQUIRED)
      public void method1() {
      // 事务逻辑
      } @Transactional(propagation = Propagation.REQUIRED)
      public void method2() {
      // 事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_REQUIRED 事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则会创建一个新的事务。如果任一方法发生异常,则整个事务将回滚。
  2. PROPAGATION_REQUIRES_NEW:

    • 作用:创建一个新的事务,并挂起当前事务(如果存在)。新事务将独立于当前事务运行。如果新事务失败,则回滚新事务,但不会影响当前事务。
    • 代码示例:
      @Transactional(propagation = Propagation.REQUIRES_NEW)
      public void method1() {
      // 事务逻辑
      } @Transactional(propagation = Propagation.REQUIRES_NEW)
      public void method2() {
      // 事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_REQUIRES_NEW 事务传播类型。每个方法都会创建一个新的事务,独立于当前事务的运行。如果任一方法发生异常,则该方法所在的事务将回滚,但不会影响其他事务。
  3. PROPAGATION_SUPPORTS:

    • 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则以非事务的方式运行方法。适用于读取数据库的操作,不需要事务支持。
    • 代码示例:
      @Transactional(propagation = Propagation.SUPPORTS)
      public void method1() {
      // 事务逻辑
      } @Transactional(propagation = Propagation.SUPPORTS)
      public void method2() {
      // 事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_SUPPORTS 事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则以非事务的方式运行。适用于不需要强制事务支持的操作。
  4. PROPAGATION_NOT_SUPPORTED:

    • 作用:以非事务的方式运行方法。如果当前存在事务,则将其挂起。适用于不需要事务支持的操作,如查询。
    • 代码示例:
      @Transactional(propagation = Propagation.NOT_SUPPORTED)
      public void method1() {
      // 非事务逻辑
      } @Transactional(propagation = Propagation.NOT_SUPPORTED)
      public void method2() {
      // 非事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_NOT_SUPPORTED 事务传播类型。这两个方法将以非事务的方式运行,即使当前存在事务也会被挂起。适用于不需要事务支持的操作。
  5. PROPAGATION_MANDATORY:

    • 作用:如果当前存在事务,则方法将在该事务中运行;如果不存在事务,则抛出异常。适用于必须在事务中运行的操作。
    • 代码示例:
      @Transactional(propagation = Propagation.MANDATORY)
      public void method1() {
      // 事务逻辑
      } @Transactional(propagation = Propagation.MANDATORY)
      public void method2() {
      // 事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_MANDATORY 事务传播类型。如果当前存在事务,则这两个方法将在同一个事务中运行;如果当前不存在事务,则会抛出异常。适用于必须在事务中运行的操作。
  6. PROPAGATION_NEVER:

    • 作用:以非事务的方式运行方法。如果当前存在事务,则抛出异常。适用于不允许在事务中运行的操作。
    • 代码示例:
      @Transactional(propagation = Propagation.NEVER)
      public void method1() {
      // 非事务逻辑
      } @Transactional(propagation = Propagation.NEVER)
      public void method2() {
      // 非事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_NEVER 事务传播类型。这两个方法将以非事务的方式运行,即使当前存在事务也会抛出异常。适用于不允许在事务中运行的操作。
  7. PROPAGATION_NESTED:

    • 作用:如果当前存在事务,则在嵌套事务中运行;如果不存在事务,则创建一个新的事务。嵌套事务是独立于当前事务但又依赖于当前事务的事务。如果嵌套事务失败,则回滚嵌套事务和当前事务。
    • 代码示例:
      @Transactional(propagation = Propagation.NESTED)
      public void method1() {
      // 事务逻辑
      } @Transactional(propagation = Propagation.NESTED)
      public void method2() {
      // 事务逻辑
      }
    • 解释:method1 和 method2 都使用了 PROPAGATION_NESTED 事务传播类型。如果当前存在事务,则这两个方法将在嵌套事务中运行。嵌套事务是独立于当前事务但又依赖于当前事务的事务。如果任一方法发生异常,则嵌套事务和当前事务都将回滚。

每日一题:SpringBoot中支持的事务类型的更多相关文章

  1. 【python】Leetcode每日一题-森林中的兔子

    [python]Leetcode每日一题-森林中的兔子 [题目描述] 森林中,每个兔子都有颜色.其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色.我们将这些回答放在 answers ...

  2. FMDB支持的事务类型

    FMDB支持的事务类型   在数据库中,事务可以保证数据操作的完整性.当存在大量并发操作,容易出现死锁问题.在SQLite中,为了解决该问题,提供三种事务模式,分别为DEFFERED.IMMEDIAT ...

  3. jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

    1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自 ...

  4. [SpringBoot]SpringBoot中使用redis事务

    本文基于SpringBoot 2.X 事务在关系型数据库的开发中经常用到,其实非关系型数据库,比如redis也有对事务的支持,本文主要探讨在SpringBoot中如何使用redis事务. 事务的相关介 ...

  5. [每日一题]ES6中为什么要使用Symbol?

    关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...

  6. SpringBoot 中的使用事务

    转自:https://blog.csdn.net/linzhiqiang0316/article/details/52638039 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数 ...

  7. 面试突击82:SpringBoot 中如何操作事务?

    在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现. 1.编程式事务 在 Spring Boot 中实现编程式事务又有两种实现方法: 使用 Tr ...

  8. [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  9. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  10. LeetCode每日一题打卡组队监督!刷题群!

    近 2000 人已经加入共同刷题啦! 群友每天都会在群里给大家讲解算法题 每周日「负雪明烛」组织直播讲题 我相信来看我博客的大部分人都是通过LeetCode刷题过来的.最近发现LeetCode中文网站 ...

随机推荐

  1. [Pytorch框架] 1.5 Neural Networks

    文章目录 Neural Networks 定义网络 损失函数 反向传播 更新权重 Neural Networks 使用torch.nn包来构建神经网络. 上一讲已经讲过了autograd,nn包依赖a ...

  2. mysql基础_事务

    定义 一个事务其实就是一个完整的业务逻辑,是一个最小的工作单元,不可再分,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 例如:王五向赵六的账户上转 ...

  3. 利用css var函数让你的组件样式输出规范样式API,可定制性更高;

    我们平时在使用Elementui Antdesing这些UI库时,难免会碰到使用deep强行侵入式去修改组件内部样式的情况:   比如下列代码,我们需要把ant的分页样式进行高度自定义,就得使用dee ...

  4. 程序员IT行业,外行眼里高收入人群,内行人里的卷王

    程序员 一词,在我眼里其实是贬义词.因为我的其他不是这行的亲朋友好友,你和他们说,你是一名程序员· 他们 第一刻板影响就是,秃头,肥胖,宅男,油腻,不修边幅 反正给人一种不干净,不好形象,,,,不知道 ...

  5. 2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true

    2022-09-30:以下go语言代码输出什么?A: true true false true false: B: true false false true false: C: true true ...

  6. 2021-06-12:已知一棵搜索二叉树上没有重复值的节点,现在有一个数组arr,是这棵搜索二叉树先序遍历的结果。请根据arr生成整棵树并返回头节点。

    2021-06-12:已知一棵搜索二叉树上没有重复值的节点,现在有一个数组arr,是这棵搜索二叉树先序遍历的结果.请根据arr生成整棵树并返回头节点. 福大大 答案2021-06-12: 先序遍历+中 ...

  7. [MAUI程序设计]界面多态与实现

    目录 需求一:在不同设备上使用不同 UI 外观 定义控件 UI 外观 基于平台自定义配置 需求二:在不同数据类别中使用不同的 UI 外观 定义视图 UI 外观 创建数据模板 创建选择器 定义数据 需求 ...

  8. 【Java】连接MySQL问题总结

    前言 最近在学习Java的数据库相关操作,在看视频时自己找资源而产生的一些问题,在此做个总结. 正文 在刚开始学习的时候,你可能跟着老师这样写代码,虽然某些地方已经冒出了红色的波浪线,但你半信半疑的继 ...

  9. Java 泛型:理解和应用

    概述 泛型是一种将类型参数化的动态机制,使用得到的话,可以从以下的方面提升的你的程序: 安全性:使用泛型可以使代码更加安全可靠,因为泛型提供了编译时的类型检查,使得编译器能够在编译阶段捕捉到类型错误. ...

  10. es笔记六之聚合操作之指标聚合

    本文首发于公众号:Hunter后端 原文链接:es笔记六之聚合操作之指标聚合 聚合操作,在 es 中的聚合可以分为大概四种聚合: bucketing(桶聚合) mertic(指标聚合) matrix( ...