Spring事务嵌套:业务场景事务2异常时需要事务2回滚事务1提交

2023-10-31

目录

1、改变事务2的传播方式REQUIRES_NEW

 

2、异步调用


业务场景:

业务提交审核(生成审核账单等数据,事务方法1),审核通过(业务看到账单如果没有问题就去手动审核通过,事务方法2),

后期增加了一个自动审核的功能,如果账单中等等一些信息匹配时就直接审核通过,此时,最理想的改动就是中间加个方法,提交审核完成后去主动判断是否能走自动审核通过,也就是事务方法1调用事务方法2,出现了事务回滚不是理想结果的情况,当2出现异常时,提交审核也会被回滚。

事务不生效问题可见:事务不生效

 

现要实现当事务方法2出现异常时,事务方法1正常提交,事务方法2回滚

1、改变事务2的传播方式REQUIRES_NEW

嵌套事务:就是事务方法A调用事务方法B,外层调用方法内层被调用方法都是事务方法的情况。

一般我们不关心外层调用方法的事务传播行为(用默认的(不指定就行))。而只关心内层被调用方法的传播行为。

我们一般情况下,会有以下三种需求:

  1. 外层调用方法和内层被调用方法,有异常一起回滚,没问题一起提交。(共用一个事务)
  2. 内层被调用方法回滚与否,不会影响外层调用方法。而外层调用方法出异常回滚,也不会回滚内层被调用方法(两个独立的事务)
  3. 内层被调用方法回滚与否,不会影响外层调用方法。而外层调用方法出异常回滚,也会回滚内层被调用方法(嵌套事务)

这三种情况正好对应三种最常用的传播行为

1----->@Transactional(propagation=Propagation.REQUIRED) :

内外层方法共用外层方法的事务

2----->@Transactional(propagation=Propagation.REQUIRES_NEW) :

当执行内层被调用方法时,外层方法的事务会挂起。两个事务相互独立,不会相互影响。

3----->@Transactional(propagation=Propagation.NESTED) :

理解Nested的关键是savepoint。他与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他的父事务相互独立,
而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。

结果:改变事务传播方式为ROPAGATION_REQUIRES_NEW,报错,因为事务方法2要用到事务方法1的数据,若不在一个事务,就找不到数据会报错

所以,怎样能让事务方法1与事务方法2无关联,事务方法1调用完事务方法2后就提交,或者说此处就不应该出现事务嵌套

 

2、异步调用

目前使用的是异步调用解决了当前的问题:一个可以无需等待被调用函数的返回值就让操作继续进行的方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring事务嵌套:业务场景事务2异常时需要事务2回滚事务1提交 的相关文章

  • DS18B20温度传感器原理及使用教程

    1 芯片简介 DS18B20数字温度传感器提供9 Bit到12 Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低温触发报警的报警功能 DS18B20采用的1 Wire通信即仅采用一个数据线 以及地 与微控制器进行通信 该传感
  • Linux下安装/使用mariadb

    文章目录 第一章 mariadb在rhel7上的使用 第二章 mariadb在rhel6上的安装 1 编译源码包 比较慢 2 二进制包安装 比较推荐 第一章 mariadb在rhel7上的使用 rhel7及以上系统默认安装了mariadb
  • C#基础入门之数据类型

    一 值类型和引用类型 在C 中数据类型总共可以分为两类 分别是值类型和引用类型 值类型 表示复制一个当前变量传给方法 当你在这个方法中改变这个变量的值时 最初生命的变量的值不会变 引用类型 表示你操作的数据是同一个 也就是说当你传一个参数给
  • 物联网面试必过要点

    要是能熟记以下知识点 再加上自身的项目经验 过个面试 问题不大 指针定义 一个指向指针的的指针 它指向的指针是指向一个整型数 int a 一个有10个指针的数组 该指针是指向一个整型数的 int a 10 一个指向有10个整型数数组的指针
  • bind的原理和bind的实现

    一 bind的特性 传递的第一个参数做为调用它的函数的this指向 bind可传递若干参数 若第一个参数传递基础数据类型 则调用他的函数的this指向该基础数据类型的包装类实例化对象 若第一个参数为null或undefined 则调用他的函
  • 数据库操作 - 关系模型

    关系数据库是建立在关系模型上的 而关系模型本质上就是若干个存储数据的二维表 可以把它们看作很多Excel表 gt 表的每一行称为记录 Record 记录是一个逻辑意义上的数据 gt 表的每一列称为字段 Column 同一个表的每一行记录都拥
  • 并查集、树状数组

    并查集 树状数组 线段树 并查集 树状数组 树状数组1 单点修改 区间查询 树状数组2 单点查询 区间修改 并查集 模板 并查集 题目描述 如题 现在有一个并查集 你需要完成合并和查询操作 输入格式 第一行包含两个整数 N M N M N
  • 清华镜像用法

    用pip安装模块时 总是会报错 大片红字 请求超时 影响心情 如果使用镜像安装 就会很顺 敲一下回车键 一两秒就搞定 节约时间 平常简单用法是 pip install beautifulsoup4 加入镜像参数后 pip install b
  • 任意进制转换(c++)

    include
  • OpenHarmony源码解析(12): hisysevent

    1 概述 HiSysEvent是面向OpenHarmony系统开发者提供的系统打点功能 通过在关键路径埋点来记录系统在运行过程中的重要信息 辅助开发者定位问题 此外还支持开发者将打点数据上传到云进行大数据质量度量 HiSysEvent包括H
  • 并查集的妙用——Leetcode 1202

    并查集的妙用 Leetcode 1202 给你一个字符串 s 以及该字符串中的一些 索引对 数组 pairs 其中 pairs i a b 表示字符串中的两个索引 编号从 0 开始 你可以 任意多次交换 在 pairs 中任意一对索引处的字
  • Springboot-data-redis结合SpringCache的使用

    spring boot data redis 与 Caache的结合使用 一 springboot data redis操作redis 二 结合Spring Cache 的使用 一 springboot data redis操作redis
  • kali与Windows安装双系统,grub引导器安装失败,或安装grub后无法引导kali系统问题解决

    1 先看问题 安装失败图片 这个时候不要慌 既然它的自动安装无法搞定 那我们就手动安装grub引导器 注意 本人电脑环境是 windows10 分区表类型是GPT类型 尝试安装kali双系统出现grub引导器错误 不同环境下解决方法可能会有
  • React-防抖

    React实际操作 两个事件 onMouseOver 和 onMouseOut HTML div gt this onMouseOver record onMouseOut this onMouseOut gt constructor co
  • 彷徨

    目录 1 slaves 2 core site xml 3 hdfs site xml 4 mapred site xml 注意要将mapred site xml template重命名为 xml的文件 5 Yarn Site xml 6
  • R手册(Common)--面向对象(R6 and S4)

    R 主要面向统计计算 似乎很少会用到面向对象的编程方法 但在统计计算中 在下列情形中使用面向对象的编程方法可以编程更有效率 文章目录 面向对象R6类 面向对象S4类 自定义S4类 实例化函数 S4的泛型函数 面向对象R6类 R 的面向对象
  • Java实现图灵机XNx2

    题目要求 程序实现图灵机XNx2的功能 1 程序风格良好 使用自定义注释模板 2 提供友好的输入输出 并进行输入数据的正确性验证 语言环境 eclipse java 算法设计 程序代码 Number类 import java util Sc
  • 阿里p8架构师耗时一年整理SpringBoot,从构建小系统到架构大系统

    Java 的各种开发框架发展了很多年 影响了一代又一代的程序员 现在无论是程序员 还是架构师 使用这些开发框架都面临着两方面的挑战 一方面是要快速开发出系统 这就要求使用的开发框架尽量简单 无论是新手还是老手都能快速上手 快速掌握页面渲染

随机推荐

  • 目标检测的中的指标的含义及其实现

    目录 一 Precision和Recall 二 IoU Intersection over Union 三 top5 top1 四 Average Precision 五 COCO数据集的评价指标 1 Average Precision A
  • 太全了——用Python操作MySQL的使用教程集锦

    一 python操作数据库介绍 Python 标准数据库接口为 Python DB API Python DB API为开发人员提供了数据库应用编程接口 Python 数据库接口支持非常多的数据库 你可以选择适合你项目的数据库 GadFly
  • Abaqus打开失败FLEXnet Licensing error:-15,10. System Error: 10061 “WinSock: Connection refused“

    好久没用电脑上的abaqus 今天一点启动就出现如下问题 Cannot connect to license server system The license server manager lmgrd has not been start
  • Java如何设置过期时间的map

    大神封装的挺好用的 package com kufang uselocal utils import java util Title ExpiryMap 可以设置过期时间的Map description ExpiryMap继承至HashMa
  • [OPENAI2021力作][CLIP: Connecting Text and Images]

    本文翻译自OpenAI官方博客 1 于2021年1月5日发布 0 前言 本博客是openAI的大佬们的全新作品 其提出了可以用于从自然语言监督信号中有效提取视觉信息的 名为CLIP的神经网络 CLIP可以被用于任何视觉分类的benchmar
  • docker K8s部署

    docker K8s部署 docker build t www aaa cn pro admin 20230202 1703 docker images docker login www aaa cn U username P passwo
  • 码云出现错误git@gitee.com: Permission denied (publickey). fatal: Could not read from remote repository. P

    第一步 重新生成ssh ssh keygen t rsa C 这里需要填写邮箱 我填写的是我的绑定主邮箱 我想其他邮箱也是可以的 只不过我没有测试 第二步 查看你生成的公钥 cat ssh id rsa pub 然后我们就可以看到我们的公钥
  • Glide:4.8.0基础使用

    参考 https blog csdn net mars314 article details 80653795 首先 添加依赖 implementation com github bumptech glide glide 4 8 0 ann
  • 微信小程序授权登陆页面

    1 在进入小程序的时候要判断是否有授权 如果没有授权 则要先授权之后 才能登陆到小程序的首页 刚开始 我把login页当作了小程序的首页 这样导致如果已经授权过 这个页面也会一闪而过 用户体验不好 捋了一下思路之后认为 应该把授权的判断放在
  • 华为OD机试 C++【 数据最节约的备份方法】

    描述 你有一堆文件需要备份 但你只有一些500MB的光盘 你的任务是弄清楚 为了备份所有文件 你最少需要多少张光盘 核心要点 每个文件的大小都是整数MB 而且不会超过500MB 文件不能被拆分来备份 给我数据 文件的大小 如 100 500
  • java基础练习题

    1变量 运算符和类型转换 1 1手动输入一个学生的成绩 对这个成绩进行一次加分 加当前成绩的20 输出加分后成绩 Scanner scan new Scanner System in System out println 请输入一个数字 i
  • [Codeforces] combinatorics (R1600) Part.5

    Codeforces combinatorics R1600 Part 5 题单 https codeforces com problemset tags combinatorics 1201 1600 1096B Substring Re
  • 【问答23】Linux移植:如何制作rootfs?

    粉丝问题 如何制作rootfs 安排 想直奔主题的 直接跳到第四章 一 分析 1 文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来 且不需要运行用户进程的话 是不需要文件系统的 文件系统简单的说就是一种目录结构 由于 linux操作
  • python os.mkdir与os.makedirs递归创建目录

    os mkdir创建单层目录 usr bin python coding UTF 8 import os sys 创建的目录 path tmp home monthly daily hourly os mkdir path 0755 os
  • [ESP32C3填坑] AT指令不应答

    烧录固件 固件连接 发布的固件 ESP32 C3 ESP AT 用户指南 latest 文档 espressif com 然后选择 v2 4 2 0 ESP32 C3 MINI 1 AT V2 4 2 0 zip这个版本 再下载烧录软件 工
  • 外观模式(Facade)

    设计模式之外观模式 外观模式的作用 为复杂的系统提供高层的接口 程序这个东西总是会变的越来越大 随着时间的推移 程序中的类会越来越多 而且它们之间相互关联 这会导致程序结构也变得越来越复杂 随之也会使得我们在使用这些类之前 必须弄清楚它们之
  • 中文乱码的原因及解决方法

    1 我们常用的编码表 ASCLL 美国标准信息交换码 gt 用一个字节的7位可以表示 ISO8859 1 拉丁码表 欧洲码表 gt 用一个字节的8位来表示 GB2312 中国的中文编码表 GBK 中国的中文编码表的升级 gt 一个汉字用两个
  • TensorFlow实战练习2

    TensorFlow实现自编码器 自编码器可以使用自身的高阶特征编码自己 自编码器其实是一种神经网络 它的输入和输出是一致的 它借助稀疏编码的思想 目标是使用稀疏的一些高阶特征重新组合来重构自己 它的特点非常明显 第一 期望输入 输出一致
  • VS2019无法登陆解决办法

    文章目录 前言 1 vs登陆 2 解决 总结 前言 今天想看看c代码 打开vs2017 哦豁 登不进去 打开vs2019 哦豁 还是不行 1 vs登陆 到这里就登不进去了 2 解决 vs2019找到账户选项 将嵌入式Web浏览器改为系统We
  • Spring事务嵌套:业务场景事务2异常时需要事务2回滚事务1提交

    目录 1 改变事务2的传播方式REQUIRES NEW 2 异步调用 业务场景 业务提交审核 生成审核账单等数据 事务方法1 审核通过 业务看到账单如果没有问题就去手动审核通过 事务方法2 后期增加了一个自动审核的功能 如果账单中等等一些信