@Transactional注解:是否使用rollbackFor=Exception.class的差异分析
下载需积分: 0 | PDF格式 | 1.02MB |
更新于2024-08-03
| 104 浏览量 | 举报
本文主要探讨了在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框架中的事务行为至关重要,尤其是在分布式系统或需要精细控制事务处理的应用中。
相关推荐




205 浏览量







白话机器学习
- 粉丝: 1w+
最新资源
- Subclipse 1.8.2版:Eclipse IDE的Subversion插件下载
- Spring框架整合SpringMVC与Hibernate源码分享
- 掌握Excel编程与数据库连接的高级技巧
- Ubuntu实用脚本合集:提升系统管理效率
- RxJava封装OkHttp网络请求库的Android开发实践
- 《C语言精彩编程百例》:学习C语言必备的PDF书籍与源代码
- ASP MVC 3 实例:打造留言簿教程
- ENC28J60网络模块的spi接口编程及代码实现
- PHP实现搜索引擎技术详解
- 快速香草包装技术:速度更快的新突破
- Apk2Java V1.1: 全自动Android反编译及格式化工具
- Three.js基础与3D场景交互优化教程
- Windows7.0.29免安装Tomcat服务器快速部署指南
- NYPL表情符号机器人:基于Twitter的图像互动工具
- VB自动出题题库系统源码及多技术项目资源
- AndroidHttp网络开发工具包的使用与优势