当前位置:网站首页>@Transactional注解加不加 rollbackFor = Exception.class 的区别?
@Transactional注解加不加 rollbackFor = Exception.class 的区别?
2022-08-11 11:33:00 【Java知音_】
点击关注公众号,实用技术文章及时了解
1、首先我在Mysql中准备了一条数据
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说明更新成功 别着急咱们继续断点往下面走
4、果然不出所料 执行到第54行的时候报错了 出现了java.lang.ArithmeticException: /by zero
5、细心的同学会发现ArithmeticException
这个异常类是继承了RuntimeException
的
而@Transactional
默认回滚的的异常就是RuntimeException
6、我们在点进去RuntimeException
这个类里面一探究竟 我们发现RuntimeException
又是继承Exception
的
而所有的异常类基本都是继承RuntimeException
包括刚才上面的java.lang.ArithmeticException
异常
所以只要是RuntimeException
和RuntimeException
下面的子类抛出的异常 @Transactional
都可以回滚的
7、这个时候我们去看一下数据库的值到底有没有修改成功 很显然数据是被回滚了 并没有修改成0
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
异常 我们去看看数据库
3、数据库被更新成0了 说明@Transactional
并不能回滚Exception异常
总结一下
@Transactional
只能回滚RuntimeException
和RuntimeException
下面的子类抛出的异常 不能回滚Exception
异常
如果需要支持回滚Exception
异常请用@Transactional(rollbackFor = Exception.class)
这里如果是增删改的时候我建议大家都使用@Transactional(rollbackFor = Exception.class)
补充一下@Transactional(rollbackFor = Exception.class)
一些失效的场景:@Transactional 注解失效的3种原因及解决办法
来源:blog.csdn.net/weixin_42169734/article/
details/117122084
推荐
Java面试题宝典
技术内卷群,一起来学习!!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
边栏推荐
- requestAnimationFrame的应用
- darknet 结构体汇总
- What areas of the deep neural network are related to the human brain neural network?
- 分布式时间槽elastic timeslot架构设计
- SD8016原厂单电池锂离子电池和锂聚合物电池充电IC
- 开源汇智创未来 | 软通动力出席开放原子全球开源峰会OpenAtom openEuler分论坛
- EastWave应用:负折射现象实时演示
- Jmeter性能测试
- 反射获取DLL中的字段、属性、方法、泛型方法(C#)
- eyb:Redis集成菜单到权限组菜单更新功能(二)
猜你喜欢
在华门店数超星巴克,瑞幸咖啡完成“逆袭”?
vending machine
OpenHarmony如何选择图片在Image组件上显示(eTS)
The old saying: The interview must ask "Three handshakes, four waves", so you can't forget it
Network Security - nmap
StratoVirt 中的虚拟网卡是如何实现的?
The ceiling-level microservice boss summed up this 451-page note to tell you that microservices should be learned this way
阿里云 Hologres助力好未来网校实时数仓降本增效
那些不用写代码也能做游戏的工具
HyperLynx(五)反射仿真
随机推荐
2022-08-10北京华为OD机试真题分享
Go编译原理系列10(逃逸分析)
openEuler小程序会议指南
SH7001单电池恒压线性充电IC
【黑马早报】抖音否认与头部主播签对赌协议;阿迪达斯CEO承认在中国犯了错;网易云社交App心遇被指涉黄;联通董事长称5G资费比点外卖还便宜
Jetpack Compose学习(9)——Compose中的列表控件(LazyRow和LazyColumn)
ESI VA One 2021软件安装包和安装教程
HyperLynx(五)反射仿真
Flutter经验整理
资本市场做好为工业互联网“买单”的准备了吗?
目标检测学习笔记——小目标检测
C语言手写魂斗罗(一)
1元限时秒杀 | 接口抓包分析与Mock实战训练营
Small target stunt | Complete the small target detection upgrade of Yolov5 in the easiest way!
挑战52天背完小猪佩奇(第02天)
亏了3000亿,巴菲特:这也叫亏?
那些不用写代码也能做游戏的工具
a-upload上传图片去掉预览icon
五分钟教你内网穿透
Grid 布局介绍