阿里开发规范强制规定@Transaction必须指定rollbackFor
2021/7/20 23:10:38
本文主要是介绍阿里开发规范强制规定@Transaction必须指定rollbackFor,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
阿里开发规范强制规定@Transaction必须指定rollbackFor
参考网址:
https://mp.weixin.qq.com/s/k0xyfM8EG8cwUDKKbbC78g
网上面试题
public class ServiceA{ @Transaction public void m1(){ //1.向db中插入数据 //2.故意抛出异常,注意这里是Exception异常 throw new Exception("故意失败!") } }
注意点
1.该方法上有@Transaction,说明该方法支持事务
2.方法内部抛出的是Exception异常,而不是RunTimeException异常
问题:
1、m1 方法中的事务会被回滚?
2、被@Transaction 标注的方法,不设置任何属性的情况下,事务什么情况下会回滚?
3、通过@Transaction 如何控制事务在什么异常的情况下回滚?
Spring 回滚事务的机制
- spring 会拦截@Tranaction 标注的目标方法,在目标方法执行之前,会打开事务,在方法执行完毕之后,会提交或者回滚事务。
- 当目标方法抛出异常的时候,异常会被 spring 事务拦截器捕获,默认情况下,当目标方法抛出 RuntimeException 及其子类的异常时,spring 会将事务回滚,由于上面的 m1 方法抛出的是 Exception 异常,而 Exception 不属于 RuntimeException 类型的异常,所以事务不会被回滚。
- @Trancation 注解有个 rollbackFor 属性,用来指定事务回滚的异常类型,所以如果想让上面的方法回滚,可以设置 rollbackFor 的类型为 Exception 类型。
rollbackFor 使用建议
强烈建议,或者强烈要求,使用@Transaction 注解时,务必设置 rollbackFor 属性的值,建议设置为 Exception 类型,也就是在所有异常的情况下都会回滚事务。
事务未达到预期效果,如何排查?
有时候,我们在使用事务的时候,如果事务实际的效果和期望的结果不一致,比如发现事务未生效,咱们可以在org.springframework.transaction.interceptor.TransactionInterceptor#invoke
方法中设置断点,spring 中就是通过这个拦截器来实现事务功能的,被 spring 管理事务的代码都会进到这个方法中,可以通过 debug 的方式快速定位到问题,而解决问题。
这篇关于阿里开发规范强制规定@Transaction必须指定rollbackFor的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-18uniapp 怎么定义对象属性?-icode9专业技术文章分享
- 2024-11-18克罗内克积是什么?-icode9专业技术文章分享
- 2024-11-18uniapp怎么实现点击防抖和节流功能?-icode9专业技术文章分享
- 2024-11-18uniapp实现全局的监听和接收有哪些方法?-icode9专业技术文章分享
- 2024-11-18TCPDF与mpdf的区别与优势是什么?-icode9专业技术文章分享
- 2024-11-17getExternalFilesDir这个方法哪些安卓版本可以使用?-icode9专业技术文章分享
- 2024-11-17app下载好后,安装包更新代码怎么写?-icode9专业技术文章分享
- 2024-11-17login-customer-id 如何获取?-icode9专业技术文章分享
- 2024-11-17使用 vite加载.env 文件环境变量无法加载是什么原因?-icode9专业技术文章分享
- 2024-11-17tp钱包是什么,有哪些功能?-icode9专业技术文章分享