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

【Java】SpringBoot事务回滚规则

SpringBoot事务回滚规则

  • SpringBoot事务回滚规则

SpringBoot事务回滚规则

在SpringBoot中,如果一个方法被声明为@Transactional,则会开启一个事务。如果这个方法中的任何一个步骤失败了(比如抛出了异常),则该事务将会回滚到之前的状态。SpringBoot事务回滚的规则如下:

  1. 默认情况下,只有在抛出运行时异常(即继承自RuntimeException的异常)时,SpringBoot才会回滚事务。如果抛出的异常是已检查异常(即继承自Exception的异常),则不会回滚事务。如果需要回滚事务,则需要将异常转换为运行时异常,可以通过在方法中抛出RuntimeException或其子类来实现。

  2. 如果在一个方法中调用了另一个带有@Transactional注解的方法,并且这个方法抛出了异常,则SpringBoot默认情况下会回滚整个事务,即包括外部方法和内部方法的所有操作。如果不想回滚整个事务,可以将内部方法的事务属性设置为Propagation.REQUIRES_NEW,这样内部方法的异常只会回滚内部方法的事务。

  3. 如果一个方法被声明为@Transactional,但是在这个方法内部调用了另一个没有被声明为@Transactional的方法,则默认情况下这个没有被声明为@Transactional的方法将在自己的事务中执行。如果这个方法抛出异常,则只会回滚这个方法的事务,而不会回滚外部方法的事务。如果想要让这个方法在外部方法的事务中执行,可以将它的事务属性设置为Propagation.SUPPORTS

  4. 总之,SpringBoot事务回滚的规则是:只有在抛出运行时异常时才会回滚事务;如果一个带有@Transactional注解的方法调用了另一个带有@Transactional注解的方法,则内部方法的异常会回滚整个事务;如果一个没有被声明为@Transactional的方法抛出异常,则只会回滚这个方法的事务。

如有错误,还请多多指教!
转载或者引用本文内容请注明来源及原作者:橘足轻重;

http://www.lryc.cn/news/58153.html

相关文章:

  • 使用cocopod就那么容易
  • 第14届蓝桥杯C++B组省赛
  • 面向对象编程(进阶)3:方法的重写
  • 2023年第十四届蓝桥杯Java_大学B组真题
  • APIs --- DOM事件进阶
  • awk命令详解以及使用方法
  • vue-router3.0处理页面滚动部分源码分析
  • 走心Python实战应用:【requests+re 模块】快速下载原shen图片
  • Comparable和Comparator的使用
  • 【OJ每日一练】1121 - 耐摔指数
  • vue项目Agora声网实现一对一视频聊天Demo示例(Agora声网实战及agora-rtc-vue使用,新增在线预览地址)
  • 集成时间序列模型提高预测精度
  • (详细)《美国节日》:某月的第几个星期几
  • 架构设计的历史背景
  • C#,初学琼林(06)——组合数的算法、数据溢出问题的解决方法及相关C#源代码
  • MySQL数据库——绘制E-R图:数据库概要设计阶段
  • 对类和对象的理解
  • edge-tts微软文本转语音库,来听听这些语音是否很熟悉?
  • MySQL更换存储引擎
  • filebeat收集不规则多行日志
  • Token Contrast for Weakly-Supervised Semantic Segmentation
  • Jenkins运行在docker中使用Maven构建Java应用程序
  • 将excel导入到sqlite的方法代码
  • Redis主从复制、哨兵和集群部署
  • protobuf序列化
  • 更新时无冲突的情况(阁瑞钛伦特软件-九耶实训)
  • 3.4 函数的单调性和曲线的凹凸性
  • LeetCode 404. 左叶子之和 | C++语言版
  • arm架构安装Rancher并导入k8s集群解决Error: no objects passed to apply
  • 安装PaddleSpeech