首页 > 其他分享 >每日一题:SpringBoot中支持的事务类型

每日一题:SpringBoot中支持的事务类型

时间:2023-07-15 21:14:52浏览次数:36  
标签:事务 method2 SpringBoot Transactional void public propagation 每日

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

  1. PROPAGATION_REQUIRED(默认):

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

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

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

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

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

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

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

标签:事务,method2,SpringBoot,Transactional,void,public,propagation,每日
From: https://www.cnblogs.com/zysicyj/p/17556934.html

相关文章

  • 十、事务消息
    事务消息介绍及流程图RocketMQ在4.3.0版中已经支持分布式事务消息,是通过二阶段提交加事务回查来保证本地事务和发送消息的一致性。事务消息交互流程如下图所示。生产者将消息发送至ApacheRocketMQ服务端。ApacheRocketMQ服务端将消息持久化成功之后,向生产者返回Ack确认......
  • springboot配置2
    核心自动配置原理        @condition条件判断注解 如果没配过就给你配 依赖底层的condition注解 里面参数是条件配置类  红色的就是不满足条件的类 ......
  • springboot 配置
    配置文件yam 名字是固定的,yaml后缀也可以比XML更适合 大量的标记被浪费yml语法把空格玩到极致   如何编写yaml文件并绑定  只有这个组件是容器中的组件才能使用容器的功能@COmponent如何在properties编写 value配置对比     ......
  • springboot3
    通过maven项目构建springboot项目创建maven项目导入springboot依赖编写一个主程序 必须加上springboot注解 主函数的快捷键psvm;两个参数一个是主类,一个是主函数参数部署测试 打包成一个jar文件包,可以在命令行运行直接场景启动器  COntroller表现层包......
  • SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文,查询明文
    场景为防止数据泄露,需要在插入等操作时将某表的字段在数据库中加密存储,在需要查询使用时明文显示。ShardingSphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。......
  • SpringBoot中集成jasypt-spring-boot实现配置文件数据加密脱敏
    场景经常会遇到这样一种情况:项目的配置文件中总有一些敏感信息,比如数据源的url、用户名、密码....这些信息一旦被暴露那么整个数据库都将会被泄漏,那么如何将这些配置隐藏呢。除了使用手动将加密之后的配置写入到配置文件中,提取的时候再手动解密的方式,还可以使用如下方式。jas......
  • 每日一个 ChatGPT 使用小技巧系列之4:使用 AI 工具对 SAP ABAP 代码的编写质量进行打分
    本系列之前的文章:与其整天担心AI会取代程序员,不如先让AI帮助自己变得更强大每日一个ChatGPT使用小技巧系列之1-给出提纲或者素材,让ChatGPT帮你写作每日一个ChatGPT使用小技巧系列之2-用ChatGPT研读SAPABAPBAPI的实现源代码每日一个ChatGPT使用......
  • 关于 SAP ABAP 事务码 SM30 里的 Restrict Data Range
    SAPABAP事务码SM30里的RestrictDataRange区域的Enterconditions和Variant这两个选项有什么作用?SAPABAP中的SM30事务码用于维护表的条目。在使用SM30事务时,RestrictDataRange区域允许用户定义一些限制条件,可以帮助缩小查询或更改的数据范围。这对于大型表......
  • SpringBoot+Vue3+MySQL集群 开发健康体检双系统
    第1章课程介绍试看4节|38分钟观看项目演示,熟悉大健康体检项目主要功能。掌握学习本课程的最佳方法,以及如何利用在线手册学习和答疑。第2章大健康体检项目全栈环境搭建16节|218分钟利用虚拟机或者云主机安装Linux系统和Docker环境,部署MongoDB、Redis、Minio和RabbitMQ等中......
  • 每日瞎总结
    2023.7.14上午纯纯啥也没干,把昨天一道Ynoi的题调完了,交了50+发才卡过去。然后看了一个小时的GF发现看了和没看一样,顺带赫了一道题。最后剩了半个小时写了些kmp板子准备重新学字符串。下午没摆太厉害,翻了翻lhm寒假讲题的视频,写了一部分马拉车的题。现在觉得自己当时是真......