首页 > 其他分享 >@Transactional注解使用事务

@Transactional注解使用事务

时间:2023-07-10 16:44:43浏览次数:43  
标签:事务 Transactional PROPAGATION 失效 注解 方法

一、事务的传播行为

PROPAGION_XXX :事务的传播行为

保证同一个事务中

  • PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
  • PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
  • PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

保证没有在同一个事务中

  • PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务
  • PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
  • PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
  • PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

 

二、@Transactional 注解失效场景(注意事项)

1、@Transactional 注解应用在非 public 修饰的方法上,导致注解失效
2、propagation 设置错误,导致注解失败

如PROPAGATION_NEVER、PROPAGATION_NOT_SUPPORTED会使当前事务无法使用,PROPAGATION_SUPPORTS不会新建事务

3、rollbackFor 设置错误,@Transactional 注解失败

在 spring 项目中, @Transactional 注解默认会回滚运行时异常及其子类,其它范围之外的异常 Spring 不会帮我们去回滚数据(如果也想要回滚,在方法或者类加上@Transactional(rollbackFor = Exception.class) 即可。

4、方法之间的互相调用导致 @Transactional 失效
(1)非事务方法调用事务方法时,事务方法的事务不会生效;
(2)同一个类里methodA调用methodB时,methodB如果隔离级别Propagation.REQUIRES_NEW,希望创建一个新事务,这时methodB的事务注解不会生效,因为没有经代理,此时methodA和B会一起处在A的事务下
5、异常被 catch 捕获导致 @Transactional 注解失效
6、数据库引擎不支持事务

首先,mysql支持

 

三、事务的四大特性

  • 原子性
  • 一致性
  • 隔离性

 

并发的事务相互独立。事务中对数据的操作彼此不可互见,除非数据已经提交后更新到库里。

 

  • 持久性

 

 

 

参考:【Java 基础】SpringBoot 中 @Transactional 注解的使用与实践

Spring 事务方法与非事务方法相互调用 @Transactional 注解失效分析

关于PROPAGATION_NESTED的理解

嵌套事务与异常处理

事务传播行为分类

 

标签:事务,Transactional,PROPAGATION,失效,注解,方法
From: https://www.cnblogs.com/chitangyu/p/17541548.html

相关文章

  • 分布式事务
    一、分布式基础        1、分布式事务:        2、CAP理论:        3、BASE理论:   使用分布式事务的原则:不用分布式事务最好。如何无法不得不用,则考虑业务出错的频率,频率低,可以走人工补偿,频率高则引入分布式事务。   ......
  • spring中的@Transactional声明式事务
     1与编程式事务区别1.1声明式事务使用@Transactional注解来实现事务创建的,spring会为加了事务配置的类创建一个代理对象,基于动态代理,通过其中参数来控制事务的传播、事务回滚等。加在类上相当于给类中所有方法都添加事务。使用声明式事务的好处是使用简单,减少很多像是开......
  • Redis事务和持久化机制
    Redis031Redis事务Redis通过multi、exec、watch等命令实现事务功能。Redis的事务功能相对较弱,无法和关系型数据库的事务相媲美。1.1multi和exec命令语法:multi开始事务命令1命令2...exec 执行事务示例:127.0.0.1:6379>multi //开始事务OK127......
  • Seata 分布式事务 XA 与 AT 全面解析
    目录XA模式是什么?什么是Seata的事务模式?AT模式是什么?为什么Seata要支持XA模式?AT与XA之间的关系总结1.XA模式是什么?首先正如煊檍兄所言,了解了什么是XA与什么是Seata定义的事务模式,便一目了然。1.1什么是XA用非常官方的话来说XA规范是X/Open组织定义的分布式事务处理(DTP,Distr......
  • mysq事务、日志
    --实现事务的两种方式--关闭事务自动提交手动commit--开启事务然后提交--事务的四大特性--原子性(不可分割,要么全部成功,要么全部失败)--一致性(事务完成时,所有数据保证一致状态)--隔离性(数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运......
  • java通过注解和反射优雅的实现数据脱敏
     数据脱敏是对分为数据库数据脱敏与接口脱敏。其中数据库入库数据脱敏方式我们一般采用对称加密来实现数据脱敏,接口脱敏我们一般用遮罩方式实现数据脱敏比如用“*”占位。本文章主要介绍接口脱敏方式。 1.定义一个自定义注解类importjava.lang.annotation.*;@Target(Elem......
  • 如何实现Java中使用注解校验参数的具体操作步骤
    Java中使用注解校验参数简介在Java开发中,我们经常需要对方法的参数进行校验,以确保传入的参数符合我们的要求。而注解是一种常用的方式来实现参数校验。本文将介绍如何在Java中使用注解来校验参数,并给出一些示例代码帮助理解。整体流程下面是使用注解校验参数的整体流程,我们将通......
  • 如何实现Java中@Table和@TableName注解的区别的具体操作步骤
    Java中@Table和@TableName注解的区别1.流程为了更好地理解和使用Java中的@Table和@TableName注解,我们可以按照以下步骤进行操作:步骤描述1.导入相关依赖2.创建数据库表3.创建实体类4.使用@Table注解5.使用@TableName注解6.测试运行2.操作步......
  • 【项目实战功能】自定义注解实现代码的执行耗时记录
    博主介绍:✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,阿里云专家博主,华为云云享专家✌......
  • Springcloud2021+Nacos2.2+Dubbo3+Seata1.6实现分布式事务
    示例代码地址:https://gitee.com/gtnotgod/Springcloud-alibaba.git更详细参考Gitee完整的项目:https://gitee.com/gtnotgod/Springcloud-alibaba.git官网下载Nacoshttps://nacos.io/zh-cn/index.html压缩包解压:配置Nacos:**/nacos/conf/application.properties#********......