首页 > 其他分享 >Spring事务(二)-事务传播行为

Spring事务(二)-事务传播行为

时间:2022-10-04 09:57:22浏览次数:55  
标签:事务 Spring REQUIRED 传播 Propagation 当前 方法

  在Spring里,一个事务方法被另外一个事务方法调用时,两个方法的事务应该如何进行,说白话一点,就是说当出现异常需要回滚时,各个方法的数据操作是否要全部回滚,事务传播行为就是决定了这样的一个处理结果。A事务方法(外部方法)调用了B事务方法(内部方法,又叫被调用方法),B是继续在A的事务中运行呢?还是为自己另开一个新事务运行呢?这就是由B的事务传播行为决定的。

  @Transactional注解通过propagation属性设置事务事务传播行为。

@Transactional(propagation = Propagation.REQUIRED)
public void method(){}

  Spring的事务传播行为一共有7种:

1、REQUIRED

        这是默认传播行为。如果当前没有事务,就新建一个事务。如果当前已经存在事务,就加入到这个事务中。这个当前事务指的是外部方法本身的事务。

2、REQUIRES_NEW

        开启一个新的事务。如果当前已经存在事务,则先将这个存在的事务挂起。( 当类A中的 a 方法用默认Propagation.REQUIRED模式,类B中的 b方法加上采用 Propagation.REQUIRES_NEW模式,然后在 a 方法中调用 b方法操作数据库,然而 a方法抛出异常后,b方法并没有进行回滚,因为Propagation.REQUIRES_NEW会暂停 a方法的事务 )

3、SUPPORTS

        如果当前存在一个事务,就加入到这个事务中。如果当前没有事务,则非事务方式执行。

4、MANDATORY

        如果当前存在一个事务,就加入到这个事务中。如果当前没有开启事务,则抛出异常。

5、NOT_SUPPORTED

        总是非事务方式执行,并挂起任何存在的事务。

6、NEVER

        非事务方式运行,当前存在事务抛出异常。

7、NESTED

        如果当前存在一个事务,则运行在一个嵌套的事务中。 如果当前没有开启事务, 则按 REQUIRED 属性执行。这里所说的“运行在一个嵌套的事务中”,其实就是说运行在外层事务的子事务中,这个子事务有单独的保存点,因此,当内部方法抛异常时,不会影响到外部方法的事务,也就是说,外部方法的数据操作仍然可以提交。

标签:事务,Spring,REQUIRED,传播,Propagation,当前,方法
From: https://www.cnblogs.com/ayic/p/16464340.html

相关文章

  • Spring事务(四)-事务隔离级别
    Spring @Transactional注解isolation属性@Transactional注解通过isolation属性设置事务隔离级别。如下:@Transactional(isolation=Isolation.DEFAULT)publicvoid......
  • Springboot接收请求参数示例
    packagecom.example.demo.controller;importcom.example.demo.model.User;importorg.springframework.web.bind.annotation.*;importorg.springframework.web.mult......
  • SpringBoot运行报错
    在SpringBoot启动时报错发现自己写的测试类这个Mapper报错但是Mapper包里面与以前写的一样但是在SPringBoot里面这个Mapper必须要打上注解才能运行......
  • Spring事务(一)-事务配置
      事务是数据库操作最基本的单元,是逻辑上的一组操作,这一组操作在同一个会话中要么都执行成功,要么都失败,这也是事务的最基本特性--原子性。事务的作用是为了保证系统数据......
  • 定时任务quartz与spring的集成
     我想要在spring的集成框架中使用spring,暂时采用quartz 根据下面的几篇博客实现了(懒得说了,直接丢链接):Quartz实现动态定时任务​​Spring3整合Quartz2实现定时任务二:......
  • spring
    依赖查找:BeanFactorybeanFactory=newClassPathXmlApplicationContext("basic_di/inject-set.xml");Personperson=beanFactory.getBean(Person.class);根据ty......
  • 【Spring boot】自动配置的开启原理
    本文结论源码使用springboot2.6.6版本开始自动配置的核心注解:@EnableAutoConfiguration@EnableAutoConfiguration中使用了@Import(AutoConfigurationImportSelector.c......
  • Spring Cloud入门
    简介微服务是由springboot开发的一个个的模块,是一个个独立的进程springcloud是微服务全家桶springcloud通过网关调用多个负载均衡(微服务)springboot是以数字作为版本,spring......
  • 2022-10-03-SpringMVC执行流程梳理及结合源码断点调试过程源码分析
    SpringMVC执行流程梳理接口方式控制器实现流程分析控制器层代码实现控制器配置SpringMVC.xml配置文件客户端浏览器发起请求,按回车前端控制器拦截所有请求/......
  • Spring Cloud:第二章:eureka服务发现
    服务注册中心:eureka-server新建一个springboot项目:eureka-server,其pom.xml配置如下:<properties><project.build.sourceEncoding>UTF-8</project.build.sou......