首页 > 其他分享 >Spring事务说明

Spring事务说明

时间:2022-09-23 17:55:22浏览次数:50  
标签:事务 Spring 存在 说明 PROPAGATION 当前 注解 方法

事务失效场景注意

spring 事务时通过spring aop实现的,通过this关键字调用方法时,没有通过代理类代理方法,导致事务失效

Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。或者指定回滚异常

将异常自己捕获后

方法定义非public

方法定义为final

事务挂起

可以理解为方法栈,挂起即保存事务的当前状态,在方法返回后恢复保存的事务状态

Springboot中,事务的注解如下:

@Transactional(propagation = Propagation.REQUIRED)

其中,Propagation有7个常量值,常用的有REQUIRED和SUPPORTS,下面是各种值的解释:

存在两个方法,A ,B,A方法调用B方法

PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

B方法事务添加此注解

A方法存在事务,B方法加入A事务。即使 A方法中 对B方法进行了try catch操作,两个事务也会保持一致性。在A事务的结尾会抛出异常Transaction rolled back because it has been marked as rollback-only

A方法不存在事务,B方法创建一个新的事务

PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

B方法事务添加此注解

A方法存在事务,B方法加入A事务

A方法不存在事务,B方法也不存在事务

PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。

B方法事务添加此注解

A方法存在事务,B方法加入A事务

A方法不存在事务,B方法抛出异常

PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

B方法事务添加此注解

A方法存在事务,A方法事务挂起,B方法事务独立,与A事务无关。但B方法的异常会返回给A方法,导致B方法事务回滚会影响A方法事务回滚。

A方法不存在事务,B方法事务独立

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

B方法事务添加此注解

A方法存在事务,A方法事务挂起,B方法不存在事务,与A事务无关。但B方法的异常会返回给A方法,导致B方法抛出的异常会导致A方法事务回滚。

A方法不存在事务,B方法也不存在事务

PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

B方法事务添加此注解

A方法存在事务,抛出异常

A方法不存在事务,B方法也不存在事务

PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

B方法事务添加此注解

A方法存在事务,B方法加入A事务。 如果A方法中 对B方法进行了try catch操作,B事务回滚不影响A事务

A方法不存在事务,B方法创建一个新的事务

NESTED申明在被调用方法上,若调用者方法有开启事务。此时NESTED会开始一个 "嵌套的" 事务, 它是已经存在事务的一个真正的子事务。 潜套事务开始执行时, 它将取得一个 savepoint。 如果这个嵌套事务失败, 我们将回滚到此 savepoint。 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交。

标签:事务,Spring,存在,说明,PROPAGATION,当前,注解,方法
From: https://www.cnblogs.com/steven158/p/16723617.html

相关文章

  • springboot 配置类
    @Data@ConfigurationProperties(prefix="recruitment.config")@ComponentpublicclassRecruitmentConfigProperty{/***完成招募跳转url*/......
  • JavaWeb--MySQL约束、数据库设计、多表查询、事务--2022年9月22日
    第一节  约束1、概念A、约束是什么约束是作用于表中列上的规则,用于限制加入表的数据约束的存在保证了数据库中数据的正确性、......
  • Java SE 16 record 类型说明与使用
    JavaSE16record类型说明与使用作者:Grey原文地址:博客园:JavaSE16record类型说明与使用CSDN:JavaSE16record类型说明与使用说明record是JavaSE16的新特......
  • Spring MVC框架:第十三章:类型转换
    SpringMVC将“把请求参数注入到POJO对象”这个操作称为“数据绑定”。数据类型的转换和格式化就发生在数据绑定的过程中。类型转换和格式化是密不可分的两个过程,很多带格......
  • Spring Boot 2.x基础教程:实现文件上传
    文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入......
  • SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider u
    场景SpringBoot中通过重写WebMvcConfigurer的addCorsMapping方法实现后台服务解决跨域问题:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/111283955在Spr......
  • 更博说明
    从今日起Truman_2022的博客开始更新了!啪叽啪叽啪叽啪叽  目前大一在读,退役OIer;将以算法专题的形式更新博客 感谢阅读! ......
  • spring常用框架
    https://spring.io/projectshttps://spring.io/projects/spring-cloudhttps://blog.csdn.net/MemoryTa/article/details/121481401 一、5个常用的spring框架1.spring......
  • springboot的全局异常处理类
    importlombok.extern.slf4j.Slf4j;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.http.HttpStatus;importorg.springframewo......
  • SpringMVC_自定义类型转换器(springboot)
    @ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddFormatters(FormatterRegistryregistry){Convert......