当前位置: 首页 > news >正文

事务管理-事务进阶-propagation属性

目录

事务属性-传播行为

propagation

 案例

需求

步骤

具体代码

小结


事务属性-传播行为

  • propagation

    • 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。即如果事务方法A中调用了事务方法B,那么事务方法B是加入A事务方法还是新建一个事务。
    • 事务传播行为描述
      REQUIRED(默认值)

      如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。(若A事务回滚,则B事务也会回滚

      SUPPORTS如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
      MANDATORY如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
      REQUIRES_NEW创建一个新事务,并挂起当前事务(如果存在)(若A事务回滚,B事务不受影响继续执行)。
      NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,则挂起该事务。
      NEVER以非事务方式执行操作,如果当前存在事务,则抛出异常。
      NESTED如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则创建一个新事务。

 案例

  • 需求

    • 解散部门时,无论成功还是失败,都要记录操作日志
  • 步骤

    • 解散部门:删除部门、删除部门下的员工
    • 记录日志到数据库表中
  • 具体代码

    • A事务
      • 根据部门ID删除部门信息并且删除员工信息
      •     @Transactional(rollbackFor = Exception.class) // todo 将deleteByID(Integer ID)方法交给Spring事务管理,以确保数据的一致性和完整性// todo 指定出现任何异常都回滚事务@Overridepublic void deleteByID(Integer id) {try {deptMapper.deleteByID(id);id = 1 / 0;empMapper.DeleteByDeptID(id);} finally {// todo 记录操作日志DeptLog deptLog = new DeptLog();deptLog.setCreateTime(LocalDateTime.now());deptLog.setDescription("执行了解散部门的操作,部门id为" + id + "的部门已经解散");deptLogService.insert(deptLog);}}
    • B事务

      • 记录删除员工信息的日志

      • @Service
        public class DeptLogServiceImpl implements DeptLogService {@Autowiredprivate DeptLogMapper deptLogMapper;@Transactional(propagation = Propagation.REQUIRES_NEW)@Overridepublic void insert(DeptLog deptLog) {deptLogMapper.insert(deptLog);}
        }
      • 在该接口实现类中添加了  @Transactionalb注解,将该类注册为一个事务,并且设置属性propagation的值(不受A事务的影响,都会执行并且提交)

小结

  • REQUIRES_NEW:当我们不希望事务之间相互影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录重。
  • REQUIRED :大部分情况下使用该传播行为即可

 

相关文章:

事务管理-事务进阶-propagation属性

目录 事务属性-传播行为 propagation 案例 需求 步骤 具体代码 小结 事务属性-传播行为 propagation 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。即如果事务方法A中调用了事务方法B&#xff0c…...

树多选搜索查询,搜索后选中状态仍保留

<template><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input v-model&qu…...

数据结构--字典树(trie)

概念&#xff1a; Trie 是一种能够快速插入和查询字符串的多叉树结构。、 节点的编号各不相同&#xff0c;根节点编号为0&#xff0c;其他节点用来标识路径&#xff0c;还可以标记单词的插入次数&#xff0c;边表示字符。 tire 维护字符串的集合&#xff0c;支持两种操作&…...

iframe通过postMessage进行跨域通信以及在Angular中使用

写在前面 在前端开发过程中&#xff0c;会遇到一些需要使用iframe的场景&#xff0c;使用iframe关键的一个点是数据之间的传输&#xff0c;基于同源的要求十分苛刻&#xff0c;大家基本上是都是跨域的&#xff0c;如果跨域进行数据传输呢&#xff1f; 大家使用的比较多的就是p…...

rust学习-引用C库

link和extern #[link(name = "...")] 是一个用于链接外部库的属性宏。 可以在 Rust 代码中引入其他语言编写的动态链接库(.so、.dll 等文件),从而实现 Rust 和其他语言的互操作。 #[link(name = "...")] 属性宏用于在 Rust 模块中引入标准 C 库(如 m…...

WebAssembly 在云原生中的实践指南

1 WebAssembly 介绍 WebAssembly&#xff08;Wasm&#xff09;是一种通用字节码技术&#xff0c;它可以将其他编程语言&#xff08;如 Go、Rust、C/C 等&#xff09;的程序代码编译为可在浏览器环境直接执行的字节码程序。 WebAssembly 的初衷之一是解决 JavaScript 的性能问…...

Azure sqlserver 更改字符集

前言 我们的Azure SQL Server是在2018年建的&#xff0c;当时还不支持汉字的字符集。然后最近发现因为字符集的缘故&#xff0c;出了bug&#xff0c;要调整字符集。然后就照着sqlserver 排序规则&#xff08;字符集&#xff09;查看与修改 一通修改。 然后神奇的事情来了&…...

git push时,由于commit了大文件无法成功push的解决办法

2句命令解决&#xff01; 如图可以看见大文件的md5值&#xff0c;复制下来&#xff0c;以下命令会使用到 命令1&#xff1a; git rev-list --objects --all | grep b8d13387c0dfd7a8cec9ff0f6c8ded06eb21556f执行上面命令将得到&#xff0c;如下的输出&#xff0c;可以得知是…...

2023_Spark_实验一:Windows中基础环境安装

Ⅰ、WINDOWS中安装JDK1.8 一、下载安装包 链接&#xff1a;百度网盘 请输入提取码 所在文件夹&#xff1a;根目录或者大数据必备工具--》开发工具(前端后端)--》后端 下载文件名称&#xff1a;jdk-8u191-windows-x64.exe 二、安装JDK 1.现在转到下载的exe文件可用的文件夹&…...

如何在Windows / Mac / iPhone / Android / Online上将MP4转换为MP3

如果只想保留MP4视频的音频轨道&#xff0c;则可以将MP4转换为MP3格式。 MP3是几乎所有设备&#xff0c;播放器和编辑器都支持的数字音频格式。无论您将MP4视频转换为MP3音频以进行脱机播放或进一步编辑&#xff0c;都可以提取音轨并保存为MP3格式。这是在不损失质量的情况下将…...

【App端】uni-app使用百度地图api和echarts省市地图下钻

目录 前言方案一&#xff1a;echarts百度地图获取百度地图AK安装echarts和引入百度地图api完整使用代码 方案二&#xff1a;echarts地图和柱状图变形动画实现思路完整使用代码 方案三&#xff1a;中国地图和各省市地图下钻实现思路完整使用代码 前言 近期的app项目中想加一个功…...

深度学习(十)--- cv2.pointPolygonTest() 判断一点是否在指定区域内

今天发现了opencv一个好用的函数 cv2.pointPolygonTest() &#xff0c;它可以判断一个点是否在指定区域内。 1. cv2.pointPolygonTest() 函数解析 dist cv2.pointPolygonTest(contour,point,Boolean)contour: 多边形轮廓 point: 坐标点 Boolean:True或False &#xff0c;Tru…...

后端面试话术集锦第 八 篇:redis面试话术

这是后端面试集锦第八篇博文——redis面试话术❗❗❗ 1. 介绍一下redis Redis是一个非关系数据库,我们项目中主要用它来存储热点数据的,减轻数据库的压力,单线程纯内存操作,采用了非阻塞IO多路复用机制,就是单线程监听,我们项目中使用springdata-redis来操作redis。 我…...

LiteOS qemu realview-pbx-a9 环境搭建与运行

前言 最近打算移植搭建 一些常见的 RTOS 的 qemu 开发学习环境&#xff0c;当前 RT-Thread、FreeRTOS 已经成功运行 qemu&#xff0c;LiteOS 初步验证可以正常 运行 qemu realview-pbx-a9&#xff0c;这里做个记录 首先学习或者研究 RTOS&#xff0c;只是看内核源码&#xff0…...

Kubernetes技术--Kubernetes架构组件以及核心概念

1.Kubernetes集群架构组件 搭建一个Kubernetes环境集群,其架构如下所示: 内容详解: Master:控制节点,指派任务、决策 Node:工作节点,实际干活的。 Master组件内容:...

拿来即用修改密码功能

<template><div><!-- 重置密码 --><el-dialogtitle"修改密码"v-model"state.resetPwdDialogVisible":showClose"state.firstLogin ! 1"width"550px"close"onCancel":close-on-click-modal"false&…...

违背原则才能写好代码(一)

如果我说&#xff0c;要写好代码&#xff0c;必须违背这些原则&#xff0c;我想所有人都会骂&#xff1a;疯子、胡说八道、哗众取宠&#xff0c;找打&#xff01; 以前我也会骂那个疯子&#xff0c;但现在不会&#xff0c;而且我会肯定地、负责任地说&#xff1a;这是真的&…...

面试官眼中的理想候选人:如何成为他们的首选

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

ES6中的扩展运算符你真的会用吗?

本文不会具体介绍扩展运算符的基本用法。 只是分享在项目中踩坑的点。 你以为的扩展运算符只是复制的功能&#xff0c;其实会偷偷修改你的原数组 案例&#xff1a; 假如arr [...arr2] &#xff0c;修改arr的值会改变arr2的值吗? 解决方案&#xff1a; case1 使用 arr […...

利用逻辑回归判断病人肺部是否发生病变

大家好&#xff0c;我是带我去滑雪&#xff01; 判断肺部是否发生病变可以及早发现疾病、指导治疗和监测疾病进展&#xff0c;以及预防和促进肺部健康&#xff0c;定期进行肺部评估和检查对于保护肺健康、预防疾病和提高生活质量至关重要。本期将利用相关医学临床数据结合逻辑回…...

【ZGC性能调优终极指南】:20年JVM专家亲授5大实战瓶颈突破法

第一章&#xff1a;ZGC核心机制与性能边界全景透视ZGC&#xff08;Z Garbage Collector&#xff09;是JDK 11引入的低延迟垃圾收集器&#xff0c;专为处理TB级堆内存与毫秒级停顿目标而设计。其核心突破在于并发标记、并发重定位与着色指针&#xff08;Colored Pointers&#x…...

忍者像素绘卷参数详解:CFG/Steps/画幅三要素调优指南

忍者像素绘卷参数详解&#xff1a;CFG/Steps/画幅三要素调优指南 1. 认识忍者像素绘卷 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站&#xff0c;它将忍者的热血意志与16-Bit复古游戏美学完美融合。这款工具采用明亮的"云端"视觉设计&#xff0c;…...

Z-Image-Turbo问题解决:手把手教你配置Gradio WebUI并映射本地端口

Z-Image-Turbo问题解决&#xff1a;手把手教你配置Gradio WebUI并映射本地端口 1. 为什么选择Z-Image-Turbo 如果你正在寻找一款既快速又高质量的AI图像生成工具&#xff0c;Z-Image-Turbo绝对值得考虑。这个由阿里通义实验室开源的高效文生图模型&#xff0c;在速度和质量的…...

如何一键下载国内主流视频平台的在线视频:Video-Downloader完全指南

如何一键下载国内主流视频平台的在线视频&#xff1a;Video-Downloader完全指南 【免费下载链接】Video-Downloader 下载youku,letv,sohu,tudou,bilibili,acfun,iqiyi等网站分段视频文件&#xff0c;提供mac&win独立App。 项目地址: https://gitcode.com/gh_mirrors/vi/V…...

行波管(TWT)核心参数权衡:填充比、流通率与电子注效率的物理本质及工程设计

在行波管&#xff08;TWT&#xff09;设计中&#xff0c;填充比&#xff08;F&#xff09;、流通率&#xff08;ηₜᵣₐₙₛ&#xff09;与电子注效率&#xff08;ηₑ&#xff09;是决定器件性能的三大核心参数&#xff0c;三者并非独立存在&#xff0c;而是形成了紧密的物理…...

不伤身的酒是智商税?这款轻养新标杆打破偏见

1.当“喝酒伤身”成为共识&#xff0c;谁在挑战这个铁律&#xff1f;中国人喝酒的历史&#xff0c;几乎和文明史一样长。但“喝酒伤身”这四个字&#xff0c;也像影子一样&#xff0c;从未离开过酒桌。每一次举杯&#xff0c;耳边总有人念叨&#xff1a;“少喝点”“伤肝”“伤…...

Kotlin 2.3.20 正式发布!解构声明不怕写反了

val (email, username) user你确定没写反&#xff1f; 如果 User 的属性顺序是 (username, email)&#xff0c;恭喜你&#xff0c;这段代码已经悄悄埋了一个 bug。更可怕的是&#xff0c;两个属性都是 String 类型&#xff0c;编译器不会报任何错误。 Kotlin 2.3.20 刚刚发布…...

SpringBoot 3.2.0 项目里,如何优雅地引入 Flowable 7.1.0 工作流引擎?

SpringBoot 3.2.0 项目优雅集成 Flowable 7.1.0 工作流引擎实战指南 在微服务架构中引入工作流引擎&#xff0c;往往意味着需要在不破坏现有架构的前提下实现业务流程的自动化管理。本文将深入探讨如何在已具备MyBatis-Plus、Spring Cloud Alibaba等技术栈的SpringBoot 3.2.0项…...

从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略

从激光雷达到AI服务器&#xff1a;实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域&#xff0c;PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡&#xff0c;PCIe的身影无处不在。然而&#xff0c;看似相同的…...

解码汽车ECU的“健康档案”:剖析吉利Basetech五大运行周期计数器(OCC)的协同诊断逻辑

1. 汽车ECU的“健康档案”是什么&#xff1f; 当你去医院体检时&#xff0c;医生会查看你的病历记录、化验报告和近期症状&#xff0c;综合判断你的健康状况。汽车ECU&#xff08;电子控制单元&#xff09;也有类似的"健康档案"&#xff0c;它就是吉利Basetech技术中…...