当前位置: 首页 > article >正文

@Transactional注解 细节!

1、@Transactional是用来干嘛的?

        @Transactional用来声明事务管理,确保方法中对数据库的操作要么全部成功,要么在出现错误时全部回滚,避免部分提交导致数据不一致。

2、@Transactional(rollbackFor = Exception.class) 什么意思?

在默认情况下,Spring只会在遇到RuntimeException或Error时回滚事务

rollbackFor = Exception.class@Transactional 注解的一种配置,它指定了哪些异常会触发事务回滚。具体来说,rollbackFor = Exception.class 的作用是让 所有类型的异常(包括 RuntimeExceptionException)都触发事务回滚。

在默认情况下,Spring只会在遇到RuntimeException或Error时回滚事务

默认行为(不加 rollbackFor 时):

  • 运行时异常(RuntimeException:会触发回滚。

  • 非运行时异常(checked exception,即 Exception 的子类):默认 不会触发回滚

加了 rollbackFor = Exception.class 后:

  • 所有异常(包括 RuntimeException 和 checked exception 都会触发回滚。

3、项目中,操作数据库的方法上为什么要加上@Transactional(rollbackFor = Exception.class);不加@Transactional发什么情况?

在项目中,@Transactional(rollbackFor=Exception.class)
如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
@Transactional注解中如果不配置rollbackFor属性,那么事务只会在遇到RuntimeException的时候也就是在遇到运行时异常的时候才会回滚
加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚

不加@Transactional发什么情况?

如果方法上没有加 @Transactional 注解,那么就没有事务管理,数据库操作将不会被 Spring 管理,可能会导致以下问题:

  • 没有事务控制:如果方法执行过程中发生异常,可能会导致部分数据库操作成功,部分失败,从而产生数据不一致的情况。
  • 无法自动回滚:如果某个操作失败或抛出异常,数据库操作不会回滚,可能会导致数据留在不一致的状态下。

总结来说,如果方法上不加 @Transactional 注解,所有数据库操作都会立即提交,无法回滚。在出现异常时,可能会造成数据的不一致。

       注意: 常见的一个实践是:如果方法中涉及多个数据库操作,并且这些操作之间有依赖关系(即操作的结果依赖于前一个操作的结果),就需要使用事务来保证一致性。如果访问数据库的次数较多,通常会涉及多个操作,因此需要事务来确保整个方法的原子性。

4、加上 @Transactional 后,如何选择回滚策略

        默认情况下@Transactional 会在遇到 RuntimeExceptionError 时回滚事务,但如果你希望 所有异常(包括检查型异常) 都触发回滚,可以使用 rollbackFor = Exception.class


http://www.kler.cn/a/466611.html

相关文章:

  • [python3]Excel解析库-XlsxWriter
  • Java虚拟机(Java Virtual Machine,JVM)
  • 【工具类】RedisUtil 操作相关
  • vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
  • AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义
  • Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
  • 检索增强生成(RAG):大语言模型的创新应用
  • LeetCode 141:环形链表
  • C++面向对象编程:纯虚函数、抽象类、虚析构、纯虚析构
  • 【项目】多模态图文理解-GLM-Edge实战
  • Scala_【5】函数式编程
  • 以太网连接,本地连接,宽带连接,无线WLAN连接;交换机和路由器
  • 【MyBatis-Plus 条件构造器】全面解析 Wrapper
  • 【赵渝强老师】MongoDB文档级别的并发控制
  • vue 虚拟滚动 vue-virtual-scroller RecycleScroller
  • logback日志文件多环境配置路径
  • Linux下读取Windows下保存的文件,报错信息中出现“^M“时如何解决?【由于Windows和Linux的换行方式不同造成的-提供两种转换方式】
  • React18路由和Vue3路由进行对比
  • [2024] 如何以 5 种可行的方式在Android中打开 HEIC 文件?
  • aardio —— 虚表 —— 模拟属性框
  • Edge Scdn的应用场景有哪些?
  • VScode SSH 错误:Got bad result from install script 解決
  • CG顶会论文阅读|《科技论文写作》硕士课程报告
  • FreeSWITCH dialplan/default.xml 之释疑
  • 如何删除 Android 设备上的应用程序 | 3种高效方法
  • Springcloud项目-前后端联调(一)