@Transactional注解加不加 rollbackFor = Exception.class 的区别?

从爱好者到工程师:如何低成本体验RFSoC ZU47DR?性能实测与避坑指南 本文详细介绍了如何低成本体验赛灵思RFSoC ZU47DR芯片,包括二手开发板选购、租赁服务、精简开发环境搭建等实用方案。通过性能实测与避坑指南,帮助爱好者和工程师在有限预算下充分利用这款集成了ARM处理器和FPGA的高性能芯片,降低开发门槛。 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/weixin_42169734/

article/details/117122084

1e3df34760af47e17cee0a01b79f5384.jpeg


1、首先我在Mysql中准备了一条数据

1f5cd59d1f961634f1927f5c69bcd639.png

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

2、简单粗暴的开始测试了

1、我们的目的是需要把delflag修改为0 简单的准备一下sql

<update id="test">
        UPDATE tbl_users set delflag='0' where account='admin'
 </update>

2、我们先来测试一下@Transactional 代码如下 大家都知道2/0必会抛出异常

@Override
  @Transactional
    public Ret test(){
        int i = articleMapper.test();
        int a = 2/0;
        if(i > 0){
            ResultUtil.success();
        }
        return ResultUtil.error();
    }

3、执行测试 i=1说明更新成功 别着急咱们继续断点往下面走

578d98393bdee1180d8337c91a6a44d3.png

4、果然不出所料 执行到第54行的时候报错了 出现了java.lang.ArithmeticException: /by zero

9805623874c5402d4f2f52f8bf322da5.png

5、细心的同学会发现ArithmeticException这个异常类是继承了RuntimeException的

而@Transactional默认回滚的的异常就是RuntimeException

d4ce54cb1986a195d1f4b86001c40dbb.png

6、我们在点进去RuntimeException这个类里面一探究竟 我们发现RuntimeException又是继承Exception的

而所有的异常类基本都是继承RuntimeException包括刚才上面的java.lang.ArithmeticException异常

所以只要是RuntimeException和RuntimeException下面的子类抛出的异常 @Transactional都可以回滚的

b8b28949b86a3a08433181ac08f6aa6f.png

7、这个时候我们去看一下数据库的值到底有没有修改成功 很显然数据是被回滚了 并没有修改成0

484e7f50088177238c916358dcdf002c.png

1、下面我们在试试@Transactional不能过滚的异常 代码如下

我们直接先用try catch来捕获异常 然后在catch里面自定义抛出Exception异常

@Override
@Transactional
public Ret test() throws Exception {
    int i = articleMapper.test();

    try {
        int a = 2 / 0;
    } catch (Exception e) {
        throw new Exception();
    }
    if (i > 0) {
        ResultUtil.success();
    }
    return ResultUtil.error();
}

2、ok直接 抛出的异常是我们指定的java.lang.Exception异常 我们去看看数据库

0b578e7a2015085ef0c97b27fdb2bcbc.png

3、数据库被更新成0了  说明@Transactional并不能回滚Exception异常

eac42b79276e457450f2e9afd5009031.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

总结一下

@Transactional只能回滚RuntimeException和RuntimeException下面的子类抛出的异常 不能回滚Exception异常

如果需要支持回滚Exception异常请用@Transactional(rollbackFor = Exception.class)

这里如果是增删改的时候我建议大家都使用@Transactional(rollbackFor = Exception.class)

补充一下@Transactional(rollbackFor = Exception.class)一些失效的场景:

1、不是用public修饰

2、try catch捕获了异常(没有在catch里面手动抛出异常)

3、没有加@Service(也就是没有被 Spring 管理)



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

bef49d4bf7f034f7f9a566cc44f6ebfc.png

已在知识星球更新源码解析如下:

fd96eceae1dd449921ebd2205a25c92f.jpeg

b55c5dc6d7f6b9a1227279133f66f8b4.jpeg

9543bfff83eb7ba79b598e7c69e8a72b.jpeg

455442ba4f78e470f4f598b666eb3e73.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
ubuntu18.04安装gtsam过程及报错error: invalid initialization of reference of type ‘const std::vector<bool>&’ 这里建议从这个链接下,不要从官网下,可能会有版本冲突 2.安装依赖 3.编译 报错: 1. error: invalid initialization of reference of type ‘const std::vector&’ from expression of type ‘const std::vector’ 124 | const std::vector& mask() const { retur... 阅读详情

相关推荐

Android TV远程调试全攻略:从开发者模式开启到ADB连接(附常见问题排查)

本文提供了一份详尽的Android TV远程调试实战指南,涵盖从开启开发者模式、配置网络ADB连接到高效调试与深度排错的完整流程。文章重点解析了通过Wi-Fi进行远程调试的核心步骤,并针对常见的连接失败、授权问题等提供了系统性的解决方案,旨在帮助开发者为Android TV应用开发构建稳定高效的调试环境。

1341

@Transactional注解加不加rollbackFor=Exception.class的区别?

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享点击关注#互联网架构师公众号,领取架构师全套资料 都在这里0、2T架构师学习资料干货分上一篇:Docker+Jenkins+Nginx 自动化部署SpringBoot项目大家好,我是互联网架构师!上周,一同事看到我去年写的一些代码,@Transactional 加上了 rollbackFor,就问我为什么。我当时和他解释了一番,...

emprere的博客 2140

IC/FPGA笔试/面试题分析(七)建立时间和保持时间类型考题汇总分析

自从召集2020届校招同行加入新建立的“IC/FPGA校招笔试面试交流群“,见识到了很多关于建立时间和保持时间分析的题目,在为别人解答疑惑,以及别人为自己解答疑惑的同时,自己对于知识的理解更加深刻了。 对于建立时间而言,从单独的对触发器的建立时间和保持时间的分析到了对电路(系统)的建立时间到保持时间的分析,前者是核心,后者是扩展,后者建立在前者的基础之上进行推到得到,同时也是芯片内部实际遵循的时...

Reborn Lee 1万+

异常:try-catch处理异常

Exception:在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,我们称之为发生异常 用if-else堵漏洞的缺点(基本不会用if-else来处理异常) (1)代码臃肿,业务代码和处理异常的代码混在一起 (2)可读性差 (3)程序员需要花费大量的精力来维护这个漏洞 (4)程序员很难堵住所有漏洞(异常) 一:基于if-else处理异常缺点太多,所以Java中专门出了一个异常处理机制:“异常三连”try-catch-finally 二:异常怎么看: 第一行:提示异常的类型

java_gml的博客 4187

winedt + miktex + SumatraPDF 搭建latex环境

整个环境包含三部分: - winedt: 前端编辑器 - miktex: 后端编译器 - SumatraPDF: 预览器顺序无关紧要, 不过如果先装miktex的话, 可能会被winedt在安装的时候自动找到路径从而不需要设置.1.安装miktex首先在latex-project官网, 打开”get”后, 有四种平台: Linux, Mac OS, Windows, Online. 我写论文

Iteration makes perfection. 6462

Godot4 TileMap分层绘制全攻略:解决角色、树木遮挡混乱,打造正确视觉层级

本文详细介绍了Godot4 TileMap分层绘制技术,通过图层管理和Y-Sort功能解决2D游戏中角色与物体的遮挡问题。从基础图层设置到高级优化策略,帮助开发者打造符合自然视觉规律的场景层次,提升游戏沉浸感。特别针对TileMap和TileSet的使用提供了实用技巧和代码示例。

weixin_28717411的博客 512

Java的@Transactional(rollbackFor = Exception.class) 与 @Transactional() 有什么区别?

Java的@Transactional(rollbackFor = Exception.class) 与 @Transactional() 有什么区别?

liuruiaaa的博客 1177

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 205

【springboot】为什么阿里规范规定Transactional注解要显示加上rollbackFor = Exception.class?

如果没有显示的声明 在抛出IO异常和SQL异常等(及其子类) 可检查性异常时,不会进行回滚 可检查性异常:非运行时异常 (在编译前就可以检测出来 最直观的体现是在IDE中直接爆红 让我们进行处理) 不可检异常: 运行时异常 (运行时候才报错 在运行前检测不出来) 举例: ...... @Transactional public void method(Entity e) throws FileNotFoundException{ // 数据库中插入了e的数据 // FileNotFoundE

孟秋与你的博客 731

模型剪枝实战 | Torch-Pruning 库在YOLOv8上的应用指南

本文详细介绍了如何使用Torch-Pruning库对YOLOv8模型进行结构化剪枝,以实现模型“瘦身”。通过DepGraph(依赖图)技术自动处理层间依赖,确保剪枝安全。文章提供了从环境搭建、核心原理理解到完整剪枝流程的实战指南,并强调了剪枝后的微调与性能评估,帮助开发者在保持精度的同时显著提升模型推理速度。

weixin_29046035的博客 503

如何计算 R 中的基尼系数(附示例)

以意大利统计学家Corrado Gini命名,基尼系数是衡量人口收入分配的一种方法。基尼系数的值在 0 到 1 之间,值越高代表收入不平等越大,其中:0代表完全的收入平等(每个人的收入都一样) 1代表完全的收入不平等(一个人拥有所有收入) 您可以在此处找到按国家/地区列出的基尼系数列表。以下示例显示了使用DescTools包中的Gini()函数计算 R 中的基尼系数的两种方法。示例 1:使用个人收入计算基尼系数假设我们有以下 10 个人的年收入列表:收入:5 万美元、5 万美元、7 万美元、7 万美元、7

Mrrunsen的博客 2991

@Transactional事务

类A调用类B,可以配置A不加事务,B加事务。如果在A中B被try catch包裹,B也会回滚。类A,类内调用,A有事务,自调用不会导致事务失效,但配置事务传播特性不管用。

m0_67235149的博客 250

VTK:受约束的 Delaunay 2D用法实战

VTK:受约束的 Delaunay 2D用法实战程序输出程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCellArray.h> #include <vtkDelaunay2D.h> #include <vtkMath.h> #include <vtkMinimalStandardRandomSequence.h> #include <vtkNamedColors.h>

希望我的博客,能帮上你解决学习中工作中所遇到的问题 944

@Transactional注解加不加 rollbackFor = Exception.class 的区别和@Transactional 注解失效的3种原因及解决办法

4.1 第一种Transactional注解标注方法修饰符为非public时,注解将会不起作用。例如以下代码。定义一个错误的标注实现,修饰一个默认访问符的方法/****/}}}在同一个包内,新建调用对象,进行访问。//调用@Transactional标注的默认访问符方法}}测试用例@Test}}以上的访问方式,导致事务没开启,因此在方法抛出异常时,操作不会进行回滚。如果方法改为public的话将会正常开启事务,将会进行回滚。

GQ_666的博客 3248

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

@Transactional注解加不加rollbackFor = Exception.class的区别?

@Transactional只能回滚RuntimeException和RuntimeException下面的子类抛出的异常不能回滚Exception异常

每一天都为明天的博客 298

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

@Transactional注解加不加 rollbackFor = Exception.class 的区别?@Transactional 注解失效的3种原因及解决办法

只能回滚和下面的子类抛出的异常 不能回滚Exception异常如果需要支持回滚Exception异常请用这里如果是增删改的时候我建议大家都使用第一种 Transactional注解标注方法修饰符为非public时,注解将会不起作用。例如以下代码。定义一个错误的标注实现,修饰一个默认访问符的方法} }在同一个包内,新建调用对象,进行访问。//调用@Transactional标注的默认访问符方法 testService . insertTestWrongModifier();} }测试用例。

qq_43842093的博客 1297

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

彻底弄懂@Transactional和@Transactional(rollbackFor = Exception.class)的区别到底在哪里

1、首先我在Mysql中准备了一条数据 2、简单粗暴的开始测试了 我们的目的是需要把delflag修改为0简单的准备一下sql <update id="test"> UPDATE tbl_users set delflag='0' where account='admin' </update> 我们先来测试一下@Transactional代码如下大家都知道2/0必会抛出异常 @Override @Transactional ...

weixin_42169734的博客 1万+

Spring中的@Transactional注解为什么要加rollbackFor = Exception.class之源码解析

开发过程中,经常需要对service层的方法加事务注解@Transactional,以确保数据库数据的前后一致以及数据安全。但是发现不少项目中只加了@Transactional注解,并没有rollbackFor = Exception.class这个属性,那么不加这个属性,有些异常,事务管理器是不会对此异常做回滚操作的。 先定结论,再做验证:当只加@Transactional注解时,那么业务代码抛RuntimeException和Error时,事务管理器会捕获到这类异常来进行回...

jll126的博客 2246

Java异常和@Transactional(rollbackFor=Exception.class)

如果你不懂异常,那看完我这篇文章应该很快对异常有了一个大概的了解。

Ddd_victory的博客 8266

spring事务管理@Transactional为什么要添加rollbackFor=Exception.class

方法拦截器进行拦截请求,执行业务逻辑.执行过程中出现异常之后走事务处理逻辑.

weixin_43401380的博客 3041
上一篇: 麻了~裁员上万人!
下一篇: 国产新一代 fastjson 2 你开始使用了吗?来看看源码解析吧!
公众号-芋道源码
博客等级 码龄10年 1631粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值