@Transactional使用的注意事项

在项目中涉及到CRUD操作时,一般都会在方法上添加该注解,以为加上@Transactional,Spring就可以自动帮我们进行事务的开启、提交

有一个很多人都会犯的误区:

将Spring事务与@Transactional划上了等号,只要有数据库相关操作就直接给方法加上@Transactional注解

但事实上,还是会有一些坑导致事务失效

@Transactional 事务失效的场景

当声明式事务 @Transactional 遇到以下场景时,事务会失效:

1、非 public 修饰的方法;

2、timeout 设置过小;

3、代码中使用 try/catch 处理异常;

4、调用类内部 @Transactional 方法;

5、数据库不支持事务。

6、没有设置属性rollbackFor = Exception.class

@Transactional只能回滚RuntimeException和RuntimeException下面的子类抛出的异常 不能回滚Exception异常!!!

如果需要支持回滚Exception异常请用@Transactional(rollbackFor = Exception.class),

如果是增删改的时候我建议大家都使用@Transactional(rollbackFor = Exception.class)。

7、@Transactional 注解属性 propagation 设置错误

如果设置的事务传播行为是这三种,发生错误事务将不会回滚:

TransactionDefinition.PROPAGATION_SUPPORTS

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

TransactionDefinition.PROPAGATION_NEVER

相关推荐
倔强的石头_1 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql