并发安全问题之--事物失效问题

并发安全问题之–事物失效问题

事物失效常见的6种原因:
1、事物方法非public修饰
2、非事物方法调用事物方法
3、事物方法抛出的异常被捕获了
4、事物方法抛出的异常类型不对
5、事物传播行为不对(事物发生嵌套时有事物传播)
6、事物锁属类没有被spring管理

1、事物方法非public修饰
spring事物是基于AOP的方式结合动态代理实现的,只有public的方法才能被进行动态代理
在这里插入图片描述
2、非事物方法调用事物方法
非事物方法调用事物是this即本类去调用,就是普通类调用普通方法,不是动态代理的事物方法
在这里插入图片描述

3、事物方法抛出的异常被捕获了
Spring事物管理是通过捕获方法抛出的异常来触发事物回滚,如果异常被捕获而没有再抛出就不会触发事物回滚
在这里插入图片描述

4、事物方法抛出的异常类型不对
Spring的事务管理默认感知的异常类型是RuntimeException,当事务方法内部抛出了一个IOException时,不会被Spring捕获,因此就不会触发事务回滚,事务就失效了。
一般通过rollbackFor属性指定要感知的异常类型,@Transactional(rollbackFor = Exception.class)
在这里插入图片描述

5、事物传播行为不对(事物发生嵌套时有事物传播)
事物默认的传播行为是REQUIRES类型,内外事物都是REQUIRES类型就会合并事物,而内部事物如果使用了REQUIRES_NEW就会开启一个新事物,
不会合并,当其他内部事物回滚时不会让他回滚。

在示例代码中,事务的入口是createOrder()方法,会开启一个事务,可以成为外部事务。在createOrder()方法内部又调用了insertOrder()方法和reduceStock()方法。这两个都是事务方法。
不过,reduceStock()方法的事务传播行为是REQUIRES_NEW,这会导致在进入reduceStock()方法时会创建一个新的事务,可以成为子事务。insertOrder()则是默认,因此会与createOrder()合并事务。
因此,当createOrder方法最后抛出异常时,只会导致insertOrder方法回滚,而不会导致reduceStock方法回滚,因为reduceStock是一个独立事务。
所以,一定要慎用传播行为,注意外部事务与内部事务之间的关系。
在这里插入图片描述
6、事物锁属类没有被spring管理
类不被spring管理,类中的事物就不会被动态代理
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/173903.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车一键启动智能系统功能作用

在现代科技的推动下,我们的生活每天都在发生着变化。其中,汽车智能一键启动系统就是科技改变生活的最好例子之一。 首先,我们来简单了解一下汽车智能一键启动系统。它是一种利用先进的电子技术和无线通信技术,实现无需钥匙即可启…

关于ruoyi(若依)框架的介绍,若依项目的入门,ruoyi(若依)框架的优缺点

一,关于ruoyi(若依)框架的介绍 若依(Ruoyi)框架是一款基于 Spring Boot 2.5.5、Spring Cloud 2020.0、OAuth2 与 JWT 鉴权等核心技术,同时也支持Spring Security、Apache Shiro 等多种安全框架,…

【论文】利用移动性的比例公平蜂窝调度测量和算法

(一支笔一包烟,一节论文看一天 )(一张纸一瓶酒,一道公式推一宿) 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 ( P F ) 2 S (PF)^2S (…

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层?1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…

【机器学习基础】机器学习入门(2)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ 💡往期推荐:【机器学习基础】机器学习入门(1) 💡…

Linux应用层点亮硬件的LED灯

一 应用层操作硬件的两种方法 应用层想要对底层硬件进行操控,通常可以通过两种方式: /dev/目录下的设备文件(设备节点);/sys/目录下设备的属性文件。 具体使用哪种方式需要根据不同功能类型设备进行选择,通…

算法——图——bsf 广度优先搜索算法 (Breadth First Search)

图遍历算法——bsf 广度优先搜索算法 (Breadth First Search) 算法 概述算法过程步骤一:初始化原点到队列步骤二:将队列的头顶点放入到已完成集合步骤三:将订单的关联顶点放入到队列中步骤四:将u顶点设置为…

学习samba

文章目录 一、samba介绍二、samba的主要进程三、配置文件四、例子 一、samba介绍 1、SMB(Server Message Block)协议实现文件共享,也称为CIFS(Common Internet File System)。 2、是Windows和类Unix系统之间共享文件的…

主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)

时间:2023 年11月16日(星期四)14:30 地点:合肥工业大学 学术会议中心三楼报告厅 主讲嘉宾:陈模军 助理教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-personal-page/CHEN-Mojun/mjchen 报名表直达&#xff1…

Ubuntu 和 Windows 文件互传

FTP 服务 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到…

C语言--每日五道选择题--Day9

第一题 1、如下程序的运行结果是( ) char c[5]{a, b, \0, c, \0}; printf("%s", c); A: a b B: ab\0c\0 C: ab c D: ab 答案及解析 D 首先这是一个字符数组,我们要知道无论是字符串还是字符数组,它们遇到ASCII值为0就…

分布式锁介绍

为什么需要分布式锁 在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、ReentrantLock等。 但是在后端集群部署的系统中,程序在不同的JVM虚拟机中运行,且…