@Transactional注解:是否使用rollbackFor=Exception.class的差异分析
需积分: 0 179 浏览量
更新于2024-08-03
收藏 1.02MB PDF 举报
本文主要探讨了在Java编程中使用`@Transactional`注解时,是否加上`rollbackFor = Exception.class`的区别。首先,作者通过一个实际场景介绍背景,即在一个Mysql数据库环境中,尝试更新一条数据的`delflag`字段为0。为了测试`@Transactional`的行为,作者编写了一个方法,该方法尝试除以0,这肯定会抛出`ArithmeticException`,这是一个`RuntimeException`的子类。
当不添加`rollbackFor = Exception.class`时,`@Transactional`默认处理的是`RuntimeException`及其子类。由于`ArithmeticException`属于这个范围,所以在方法执行时遇到异常后,事务会被自动回滚,导致数据库的更新操作并未完成,`delflag`字段保持不变。
接下来,作者展示了另一种情况,即明确指定`rollbackFor = Exception.class`。这将允许`@Transactional`处理更广泛的异常类型,不仅仅是`RuntimeException`,而是所有继承自`Exception`的异常。在这个例子中,他们故意引发一个`Exception`类型的异常,而不是`RuntimeException`,尽管没有指定具体异常类型,但由于`Exception`是一个超类,所以这次事务也会回滚,数据同样不会被修改。
总结起来,不加`rollbackFor = Exception.class`时,`@Transactional`只会对`RuntimeException`及其子类进行回滚,而加上后则可以处理整个`Exception`类及其子类,增加了事务管理的灵活性。这种理解对于理解和控制Spring框架中的事务行为至关重要,尤其是在分布式系统或需要精细控制事务处理的应用中。
2019-04-05 上传
2019-08-31 上传
2020-05-14 上传
2024-05-30 上传
2023-09-14 上传
2024-01-24 上传
2024-01-25 上传
2023-09-10 上传
2023-09-08 上传
![](https://profile-avatar.csdnimg.cn/1ad39e95093044228d03f0d7ce161a82_zy_dreamer.jpg!1)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/user-vip.1c89f3c5.png)
白话机器学习
- 粉丝: 1w+
- 资源: 7693
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景