面试题之——事务失效的八大情况

事务失效的八大情况

一、非public修饰的方法

@Transactional注解只能在在public修饰的方法下使用。

/**
 * 私有方法上的注解,不生效(因私有方法Spring扫描不到该方法,所以无法生成代理)
 */
@Transactional
private boolean test() {
    //test code
}

二、类内部访问

类内部非直接访问带注解标记的方法 B,而是通过类普通方法 A,然后由 A 调用 B。 自己玩自己

@Service
public class Demo {

  public void A() {

    this.B();
  }
  
  @Transactional
  public void B() {
     ......
  }
}

  • 在该Service类中使用AopContext.currentProxy()获取代理对象
@SpringBootApplication
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableTransactionManagement
public class App {

   public static void main(String[] args) {
       SpringApplication.run(App.class, args);
   }
}
((ServiceA)AopContext.currentProxy()).doSave(user);

三、数据库不支持事务

MySQL中,MyISAM引擎不支持事物,InnoDB 支持事物

四、异常类型不匹配

@Transactional 注解默认只处理运行时异常( RuntimeException 和 error),而不会处理受检异常( Exception 的子类)。当抛出未被捕获的运行时异常时,Spring 会触发事务回滚操作,将之前的操作撤销;而对于未被捕获的受检异常,Spring 不会触发事务回滚操作。如果需要处理受检异常并触发事务回滚,可以通过 rollbackFor 和 noRollbackFor 属性来指定需要回滚或不需要回滚的异常类型。

/**
* 非运行异常,且没有通过 rollbackFor 指定抛出的异常,不生效
*
* @param id
* @return
* @throws Exception
*/
 @Transactional
   public void insertAll(PoMaster master) throws Exception {
       poMasterDao.insert(master);
       if(1 == 1){
           throw new Exception("测试异常");
       }
       poItemDao.insertList(master.getItems());
   }

五、传播属性设置问题

propagation属性错误
@Transactional默认的事务传播机制是:REQUIRED,若指定成了NOT_SUPPORTED、NEVER事务传播机制,则事物不生效,如:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
在这里插入图片描述

六、捕获异常未抛出

@Transactional
public void A(){
	try{
	   ......
	}catch(Exception e){
	   // 未抛异常
	}
}

七、Bean没有纳入Spring IOC容器管理

// 注释调@Component,该类没被Spring管理,事物也是不生效的
// 注释调@Component,该类没被Spring管理,事物也是不生效的
public class Demo {
  
  @Transactional(rollbackFor = Exception.class)
  public void A() {
     ......
  }
}

八、事务方法内启动新线程进行异步操作

主线程执行过程中,调用了一个新的线程执行任务,在子线程使用过程中,如果发送异常,由于进程是异步的,所以主进程无法感知到,不会进行回滚,此时事务失效了。

@Transactional(rollbackFor= BizException.class)
 public int transfer2(String from,String to, int money){
     accountDao.decrMoney(from,money);

     new Thread(()->{
         int c = 5/0;
         accountDao.addMoney(to,money);
     }).start();
     return 1;
 }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构--堆

文章目录 一、堆的概念二、堆的创建三、堆的插入和删除四、堆的应用1.优先级队列2.堆排序3.TopK问题 一、堆的概念 对于一个关键码序列的集合来说,K{K0,K1,K2,K3…Kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足…

Vue中如何处理组件间的耦合问题?

在Vue中处理组件间的耦合问题是前端开发中常见的挑战之一。耦合问题指的是组件之间的依赖关系过于紧密,一旦某个组件发生改动,则可能导致其它组件也需要作出相应调整。为了解决这个问题,我们可以采取以下几种方法: 使用事件总线&…

riscv 栈空间静态分析

分析riscv架构的裸机代码中最大栈空间 riscv的基本过程调用标准 1.函数前8个参数用a0~a7传输 2.超过8个的参数使用栈传递 3.函数返回参数到a0,a1寄存器中,返回值保存在ra寄存器中 4.如果子函数有使用s0-s11寄存器,那么在使用前需要将这些寄存器的内…

django中静态资源配置

一&#xff1a;静态资源路径配置 在settins.py中INSTALLED_APPS属性是否存在django.contrib.staticfiles&#xff0c;如果没有加上 静态资源根目录配置 二&#xff1a;静态资源调用 #引入JS <script type"text/javascript" src"/static/js/test.js"&g…

实操keepalived(高可用)+Nginx(四层代理+七层代理),实现高可用、负载均衡以及动静分离

一 vrrp技术 VRRP 相关术语 VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;i通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。 协议版本: VRRPv2 (常用) 和VRRPv3:0 VRRPv2仅适用于IPv4网络&#xff0c;VRRPv3适用…

力扣日记3.6-【回溯算法篇】51. N 皇后

力扣日记&#xff1a;【回溯算法篇】51. N 皇后 日期&#xff1a;2023.3.6 参考&#xff1a;代码随想录、力扣 51. N 皇后 题目描述 难度&#xff1a;困难 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将…

【大数据】通过 docker-compose 快速部署 MinIO 保姆级教程

文章目录 一、概述二、MinIO 与 Ceph 对比1&#xff09;架构设计对比2&#xff09;数据一致性对比3&#xff09;部署和管理对比4&#xff09;生态系统和兼容性对比 三、前期准备1&#xff09;部署 docker2&#xff09;部署 docker-compose 四、创建网络五、MinIO 编排部署1&…

插件WebApiClient.JIT的使用方法

我们在项目开发过程中&#xff0c;经常需要调用第三方接口&#xff0c;使用httpclient需要写一堆代码&#xff0c;使用插件WebApiClient.JIT可以简化很多代码量&#xff0c;接下来介绍一下WebApiClient.JIT的使用方式。 添加引用&#xff0c;打开NuGet&#xff0c;查询插件&am…

vue3+element plus 实现百度地图显示路径

添加依赖 <!-- index.html --><script type"text/javascript" src"//api.map.baidu.com/getscript?v3.0&akyI6kBeC9G4LntEWXklE2iNHwRUrmFEQc"></script><script type"text/javascript" src"//api.map.baidu.co…

【python基础学习11课_异常机制】

一、异常 1、异常的定义 异常&#xff1a;程序无法继续执行异常会中断程序执行异常处理&#xff0c;是为了不中断程序执行。而不是避免错误。有些代码是报错就是要暴露出来有了异常机制&#xff0c;错误的代码报错后抛出异常&#xff0c;代码从上到下&#xff0c;报错代码后面…

【PCIe】初识PCIe

&#x1f525;博客主页&#xff1a;[PannLZ] &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 PCIe简介PCIe速度 PCIe简介 计算机内部有很多电子元器件&#xff0c;他们之间会有数据沟通和传输的需求。如果A元件想给B元件传输数据&am…

Axure RP 10:让原型设计更快、更直观、更智能 mac版

Axure RP 10是一款强大的原型设计工具&#xff0c;它能够帮助设计师快速创建高保真、交互式的原型&#xff0c;从而更好地展示和测试设计方案。这款软件凭借其直观易用的界面和丰富的功能&#xff0c;已经成为了许多设计师的首 选工具。 Axure RP 10 for Mac版软件获取 首先&a…

使用Matlab计算IGRAv2探空站的Tm和PWV

1. 探空站IGRAv2数据 探空站的Tm常作为真值&#xff0c;去检验Tm线性公式或者ERA5 Tm等的精度 。 探空站PWV常作为真值&#xff0c;去检验GNSS PWV等的精度 2. Tm 的计算方法 Tm 的计算方法有两种在前面的文章有讲&#xff0c;这里用 使用水汽压和温度计算Tm。 ei和 Ti 表示…

Day15:技术架构、Maven、Spring Initializer、Spring全家桶、Spring IoC

侧重于服务端&#xff08;后端&#xff09;&#xff0c;不在意前端&#xff0c;了解一些前端即可&#xff09; 技术架构 &#xff08;把Spring设计的更简单好用了就是Spring Boot&#xff09; 开发环境&#xff08;Maven&#xff09; Maven maven通过brew安装的目录为&#x…

学习网络安全越早知道越好的事

网络安全专业最应该知道的血泪建议&#xff0c;希望大一就有人告诉你。 如果你是网络安全行业&#xff0c;那么大学四年千万不能就在宿舍打游戏度过&#xff0c; 大一你应该学习掌握基础的编程语言&#xff0c;比如Python&#xff0c;PHP&#xff0c;web前端&#xff0c;知道…

基于深度学习的交通标志检测识别系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

[动态规划][蓝桥杯 2022 省 B] 李白打酒加强版 -- 代码注释含详解

P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷) 洛谷题目链接 李白打酒很快活&#xff0c;而我打了一晚上代码才把这题弄懂&#x1f972; P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示\***\*\*\*\*\***\*\*\**…

谷粒商城【成神路】-【9】——商城页面

目录 &#x1f9c8;1.项目服务部署架构 &#x1f95e;2.Thymealf &#x1f37f;3.请求接口 &#x1f32d;4.使用nginx转发 &#x1f956;5.nginx动静分离 &#x1fad3;6.优化 1.项目服务部署架构 使用nginx动静分离&#xff0c;使图片、js等静态资源和服务器请求分开…

基于51单片机的公交ic卡系统设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案选择 3 1.2 硬件选择 3 1.3 系统工作原理 4 1.4 总体方案确定 5 2 系统硬件电路设计 6 2.1 主控模块电路设计 6 2.2 电源电路设计 8 2.3 显示电路模块设计 8 2.4 报警模块电路设计 10 2.5 RC522刷卡模块 10 2.6 独…

[网络安全] PKI

一、PKI 概述 名称; 公钥基础设施 (Public Key Facility) 作用: 通过加密技术和数字签名保证信息安全 组成: 公钥机密技术、数字证书、CA、RA 二、信息安全三要素 机密性&#xff1a;确保仅信息发收双方 能看懂信息 完整性&#xff1a; 确保信息发收完整&#xff0c;不被破坏 …