为什么阿里规范需要在 @Transactional 事务注解中指定 rollbackFor?

【项目实战】阿里巴巴开发规范解读 阿里巴巴的开发规范是一套详细的编程准则。阿里巴巴开发规范,也被称为《阿里巴巴Java开发手册》。阿里巴巴开发规范是阿里巴巴集团内部多年技术沉淀和集体智慧的结晶,后公开发布。阿里巴巴的开发规范是一套详细且全面的指导原则,旨在确保项目的质量、效率和安全性。 阅读详情

Spring框架的事务基础架构代码将默认地 只 在抛出运行时和unchecked exceptions时才标识事务回滚。也就是说,当抛出个RuntimeException 或其子类例的实例时。(Errors 也一样 - 默认地 - 标识事务回滚。)从事务方法中抛出的Checked exceptions将 不 被标识进行事务回滚。

1)让checked例外也回滚:在整个方法前加上

@Transactional(rollbackFor=Exception.class)

2)让unchecked例外不回滚:

@Transactional(notRollbackFor=RunTimeException.class)

3)不需要事务管理的(只查询的)方法:

@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意:如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。

总结

Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。你当然可以在接口上使用 @Transactional 注解,但是这将只能当你设置了基于接口的代理时它才生效。因为注解是不能继承的,这就意味着如果你正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装(将被确认为严重的)。因此,请接受Spring团队的建议并且在具体的类上使用 @Transactional 注解。

@Transactional 注解标识的方法,处理过程尽量的简单。尤其是带锁的事务方法,能不放在事务里面的最好不要放在事务里面。可以将常规的数据库查询操作放在事务前面进行,而事务内进行增、删、改、加锁查询等操作。

作者:Mint6

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 blog.youkuaiyun.com/Mint6/article/details/78363761

往期精选  点击标题可跳转

[拒绝 kill -9 强制停止,如何优雅停止 Spring Boot 服务?](()

[数据库连接池到底应该设置多大?响应时间从 100ms 优化到 3ms!](()

[IntelliJ IDEA 中使用热部署 JRebel 神器,开发效率提升一倍!](()

[MySQL 中 update 语句双引号错位引发的“血案”,这会长记性了!](()

[程序员缺乏工作经验的 7 种表现,你有没有中招?及早避坑!](()

[数据库中 SQL 语句该如何处理 NULL 值,你真的了解过吗?](()

[纳尼?Spring Boot 项目中使用 CommandLineRunner 有坑!](()

[一次深夜 MySQL 优化,亿级数据分页的奇妙经历](()

[为什么数据库连接池要用 ThreadLocal 呢?不用会怎么样?](()
[面试官问:线程池如何重复利用空闲的线程来执行任务?](()
[Java 程序员不可或缺的 11 种 IntelliJ IDEA 插件,提升开发效率!](()
点个赞,就知道你“在看”!

springboot开启事务管理(真的就这么简单?) springboot开启事务管理 阅读详情

相关推荐

昇腾910安装驱动出错,降低Centos7.6的内核版本

Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。

深蓝 3300

spring事务

不要在事务内对使用了悲观锁,同一行的数据有多个更新操作,会导致死锁发生或者锁超时现象。 Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。你当然可以在接口上使用 @Transactional 注解,但是这将只能当你设置了基于接口的代理时它才生效。因为注解是不能继承的,这就意味着如果你正在使用基于类的代理时,那...

weixin_30312563的博客 137

基于 Python Flask 的智能个人财务系统

4.财务分析与报告:自动生成财务分析报告,提供图表展示(如饼图、柱状图)帮助用户了解收支状况和财务趋势。9.管理员管理功能:提供管理员模块,允许管理员查看用户财务数据、生成统计报告,并进行用户管理与权限控制。5.资产管理:用户可以记录并追踪个人资产(如房产、车辆、投资等),系统提供资产价值增减情况和趋势分析。3.预算制定与管理:用户根据收入设定每月预算,系统自动对比实际支出与预算差异,实时提醒预算完成情况。6.信用卡管理:提供信用卡账单记录与管理功能,提醒用户信用卡还款日期,避免逾期,帮助管理信用卡消费。

weixin_68689665的博客 424

阿里巴巴编码规范

文章目录命名风格常量定义代码规范OOP规范集合处理并发处理控制语句注释规范其他异常日志异常处理日志规约单元测试安全规约Mysql数据库建表规约索引规约SQL语句ORM映射工程结构应用分层二方库依赖服务器设计规约 命名风格 代码命名不能以下划线或者$开头或者结尾 代码命名不能以中文拼音或者中文拼音与英文混合方式 类名使用UpperCamCamelCase风格,但DO、PO、DTO、VO、BO等除外 方法名、参数名、变量名统一使用lowerCamelCase,必须遵守驼峰命名 常量名全部大写

望山。 1万+

UE4 专用服务器搭建(UE4.27为例)

专用服务器、DS服务器

mimo134的博客 2775

STM32CubeMX HAL实战:JY901S串口数据解析与姿态解算

本文详细介绍了如何使用STM32CubeMX HAL库实现JY901S六轴姿态传感器的串口数据解析与姿态解算。从基础硬件连接到USART3配置,再到数据接收状态机实现和传感器校准方法,最后深入讲解互补滤波与Mahony滤波算法在姿态解算中的应用。通过实战代码演示,帮助开发者快速掌握无人机、机器人等项目中关键姿态数据处理技术。

weixin_28703489的博客 432

阿里巴巴开发规范

一、编程规范 1.1、命名风格 (1)不能以下划线或者美元符号开始和结束; (2)不能使用拼音和英文混合方式,不能直接中文方式; (3)类名使用UpperCamelCase风格,但是DO/BO/DTO/VO/AO/PO/UID除外: 正解:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion 反例:macroPolo / ...

RuiKe的博客 2万+

【重磅更新】CT/MRI LI-RADS 2024:肝细胞癌局部区域治疗后反应评估的核心突破与临床实践指南

减少过度治疗:辐射 LRT 的 Nonprogressing 类别避免了 “持续强化 = 存活” 的误判,降低不必要的再治疗风险;提高检出效率:非辐射 LRT 的辅助特征升级减少了 Equivocal 比例,更早识别存活肿瘤;统一评估语言:标准化的分类标准为放射科、肝病科、肿瘤科、肝移植科的多学科协作(MDT)提供了统一 “沟通工具”,助力治疗方案的精准制定。

楚山之石的博客 1225

Java阿里巴巴代码规范

目录 1 编程规约 1.1 方法参数类型必须一致,不要出现自动装箱拆箱操作 1.1.1 反例 1.1.2 正例 1.2 SimpleDateFormat是线程不安全的 1.2.1 反例 1.2.2 正例 1.3 使用equals方法应该注意空指针 1.3.1 反例 1.3.2 正例 2 异常日志 2.1 事务场景中如果异常被被捕获要注意回滚 2.1.1 反例 2.1.2 正例 2.2 不要在 finally 块中使用 return 2.2.1 反例 2.2.2 正例

赵广陆 9734

Beyond the Spec: Decoding Samsung‘s LPDDR6 Sub-Channel and Wide-NRZ Innovations

本文深入解析了三星LPDDR6内存的两大核心技术:Sub-Channel架构与Wide-NRZ信号技术。Sub-Channel架构通过将物理通道划分为多个独立子通道,实现了内存访问的细粒度控制,大幅提升了能效,尤其适用于AI与边缘计算场景。Wide-NRZ则通过增加并行数据线而非采用PAM4,在提升带宽的同时保持了优异的信号完整性与低功耗特性。

weixin_29209801的博客 136

loadStop的原因导致的SSUSP

Total内存值是可用来调度的可用内存,当前可用内存为 0M。 loadSched和loadStop的阈值是根据 Total 内存和节点内存来做限制的。 loadStop 50G,现在有大量作业SSUSP,说明之前某个时间点该节点内存可能有低于50G的时候,导致作业SSUSP,具体是否是这个原因引起的需要用 bjobs -l JobID 看下作业的详细信息。 如果是loadStop的原因导致的 SSUSP,根据loadStop设置的阈值,Total 值高于loadStop值后,将逐步恢复挂起的作业

Blueberry521的博客 666

@transactional 可以定义到controller_为什么阿里规范中要求事务注解@Transactional中指定rollbackFor?...

阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。异常的分类先来看看异常的分类error是一定会回滚的这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常可查的异常(checked exceptions):Exception下除了RuntimeException...

weixin_36380427的博客 316

Vibe Draw:AI实现2D草图转3D建模,开源免费的设计师宝藏软件!

AI实现2D草图转3D建模,开源免费,设计师进来看一下?

Code_流苏:在代码中寻诗意,在实践中觅真知 2150

为什么阿里规范中要求事务注解@Transactional中指定rollbackFor?

阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。异常的分类先来看看异常的分类error是一定会回滚...

Java精选 1121

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

@Transactional +自定义注解不生效_为什么阿里规范中要求事务注解@Transactional中指定rollbackFor?...

阿里巴巴Java规范:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。异常的分类先来看看异常的分类error是一定会回滚的这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常可查的异常(checked exceptions):Exception下除了RuntimeException...

weixin_39674028的博客 142

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么阿里规定需要在事务@Transactional中指定rollbackFor?

这就意味着如果你正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装(将被确认为严重的)。如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。...

Cr1556648487的博客 519

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

@Transactional需要指定rollbackFor,养成良好习惯

今天在执行阿里的代码检查的时候发现,代码中的事务没有显式规范rollback被提示 在注解中加入你需要回滚得异常类型 @Transactional(rollbackFor = Exception.class)

Levi_feng的博客 500

@transactional怎么往外抛异常_为什么阿里规定需要在事务注解 @Transactional 中指定 rollbackFor?...

往期热门文章:1、《往期精选优秀博文都在这里了!》2、一笔订单,但是误付了两笔钱!如何解决?3、5款强大的JVM 性能调优监控工具 !4、22款终端生产力工具,效率飞起!5、又一P1故障,锅比脸圆来源:blog.youkuaiyun.com/Mint6/article/details/783637611.异常的分类2. @ Transactional的写法java阿里巴巴规范提示:方法【编辑】需要在...

weixin_29189373的博客 1219

为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?

作者:Mint6 来源:http://39sd.cn/53D5D Java阿里巴巴规范提示:方法【edit】需要在Transactional注解指定rollbackFor或者在方法中显示的rollback。 异常的分类 先来看看异常的分类 error是一定会回滚的。 这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions):Exception下除了RuntimeException外的异常 不可查的异常(unche.

weixin_46577306的博客 3013
上一篇: 为什么Redis单线程却能支撑高并发
下一篇: 为何要配置环境变量?带你一探究竟
java100001
博客等级 码龄5年 4粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值