TransactionAspectSupport.currentTransactionStatus.setRollbackOnly 是什么作用,为什么这么写

news2024/11/15 8:37:10

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 是Spring框架提供的一个方法,用于在事务执行过程中显式地指示当前事务需要回滚。

使用这个方法一般结合try catch使用,出现异常时,可以做到不抛出异常,但正常回滚:
在这里插入图片描述
如上图,这样可以在正常回滚的同时,做到在resultMap中封装自定义返回信息;

作用

显式回滚:
当事务中的某部分业务逻辑执行失败,但又不希望立即抛出异常终止事务时,可以使用setRollbackOnly()来标记当前事务需要回滚。
这意味着事务最终会回滚,即使之后的代码没有抛出异常。
灵活的异常处理:
允许你在业务逻辑中做出更细粒度的控制,比如可以选择继续执行后续的代码,而不是直接抛出异常终止事务。
避免异常传播:
如果你不希望异常在事务中传播,而是希望在事务结束后统一处理异常,可以使用setRollbackOnly()来标记事务需要回滚。

为什么这么写

非异常情况下的回滚:
有时业务逻辑需要根据某些条件决定是否回滚事务,而不是通过抛出异常来触发回滚。
例如,当遇到某个可恢复的错误时,你可以选择继续执行后续操作,但需要确保整个事务最终回滚。
避免事务传播:
如果在事务中遇到一个错误,但不希望这个错误立即中断事务的执行,可以使用setRollbackOnly()来标记事务需要回滚,同时继续执行后续的业务逻辑。
控制异常传播:
有时你可能希望在事务结束时才处理异常,而不是立即抛出异常。这样可以在事务内部执行一些清理工作,然后再统一处理异常。
示例
下面是一个使用setRollbackOnly()的例子:

**@Service
public class TransactionService {

    @Autowired
    private SomeRepository someRepository;

    @Transactional
    public void processTransaction() {
        try {
            someRepository.saveSomething();
            if (!isValidCondition()) {
                // 标记事务需要回滚
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                // 继续执行后续操作
                doSomethingElse();
            }
        } catch (Exception e) {
            // 处理异常
            handleException(e);
        }
    }

    private boolean isValidCondition() {
        // 业务逻辑判断
        return false;
    }

    private void doSomethingElse() {
        // 继续执行其他操作
    }

    private void handleException(Exception e) {
        // 统一处理异常
    }
}**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为云耀服务器安装和使用MobSF进行APP基线检查

华为云耀服务器安装和使用MobSF进行APP基线检查 MobSF简介 Mobile Security Framework(MobS,移动安全框架)是一种自动化多平台移动应用程序,支持Android、iOS和Windows应用自动化测试。能够进行静态、动态分析,web A…

【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用

最终效果 文章目录 最终效果前言为什么使用CharacterControllerSimpleMove和Move如何选择?1. SimpleMove2. Move 配置CharacterController参数控制相机移动跳跃方式一方式二 下蹲处理下坡抖动问题实现奔跑和不同移速控制完整代码补充,简单版本 实现物理碰…

--归并排序--

归并排序是我们研究的最后一种排序了,那什么是归并排序呢? 我们之前在力扣上面刷过一个题目,就是合并两个有序数组,其实也是和这个是一个思想借用第三 个数组,然后将第三个数组拷贝给a数组,这样就实现了排…

计算机毕业设计选题推荐-智慧物业服务系统-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

2024年08月05日截稿 | 第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024) 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 2024年9月13-15日 | 中国武汉 重要信息 大会官网:www.ic…

S200自检程序报错

现象:在ATE电脑断网的情况下,启动自检程序,提示如下报错: 解决方法:

大模型在RPA领域的应用与探索-代码生成

01. 前言 随着人工智能技术的飞速发展,大模型在多个领域的应用日益广泛。特别是在机器人流程自动化(RPA)领域,这些技术的进步为自动化任务的执行带来了显著的效率提升。然而,传统RPA在任务流程编排上依赖人工编写脚本…

如何在 VSCode 中使用驭码CodeRider?【实践篇】

极狐GitLab 在 5 月 28 日正式发布了 AI 产品驭码CodeRider,可以使用驭码CodeRider 进行AI 编程 & DevOps 流程处理。现已开启免费试用,登录官网:https://coderider.gitlab.cn/ 即可申请试用。 GitLab 中文版学习资料 驭码CodeRider 官…

大模型之大模型技术生态

本文作为大模型综述第四篇,介绍语言大模型技术生态。 随着大模型技术的快速发展,大模型的生态体系也在快速构建。典型的大模型平台如 ChatGPT、文心一言、讯飞星火等提供如 APP、网页版、 API 接口等多种形式的开放服务,并通过开放插件机制、Function Call 等实现大模型外部…

STL常用容器- set/ multiset 容器

set基本概念 set也叫做集合,它的特点就是所有的元素在插入的时候会自动完成排序(默认是升序排列)。 set在物理空间上也不是连续的,所以它就不支持随机存取(利用下标), 它的迭代器也不支持指针算术运算,只能进行和--。…

filebeat

1、作用 1、可以在本机收集日志2、也可以远程收集日志3、轻量级的日志收集系统,可以在非java环境运行。logstash是在jmv环境中运行,资源消耗很大,启动一个logstash要消耗500M左右的内存,filebeat只消耗10M左右的内存。收集nginx的…

在Jira中使用AI

Jira已经可以使用AI功能了。 如果您使用的是Jira Cloud,您需要请管理员在管理页面中打开AI功能开关。(AI功能在Standard版中未提供,请使用Premium或更高级的版本)如果您使用的是自己部署的Jira Data Center,您需要请管…

Java中实现文件上传

目录 1、文件上传本地 1.1 原理 1.2 如何使用文件上传 1.2.1 引入文件上传的依赖 1.2.2 配置文件上传拦截器 1.2.3 完成文件上传的代码 2、文件上传oss服务器 2.1 为什么需要上传到oss服务器 2.2 如何使用oss 2.2.1 开启oss服务 2.2.2 在Java中引入依赖 2.2.3 查看自…

HarmonyOS(47) onSizeChange和onAreaChange

onSizeChange和onAreaChange onSizeChangeonAreaChangeonAreaChange和onSizeChange的区别参考资料 onSizeChange 组件区域变化时触发该回调。仅会响应由布局变化所导致的组件尺寸发生变化时的回调。由绘制变化所导致的渲染属性变化不会响应回调,如translate、offse…

深度学习模型服务端部署——flask+gunicorn+supervisor+nginx+docker

前言:深度学习模型经过前期的训练调优评估,最终得到一个精度速度满足要求的模型(.pth, .ckpt,或者.onnx等等格式),但模型要实际用起来,还得部署起来,部署分为在移动端芯片上和服务器上。在移动端芯片部署通…

联邦学习开山之作论文解读与Pytorch实现FedAvg

参考文献:McMahan B, Moore E, Ramage D, et al. Communication-efficient learning of deep networks from decentralized data[C]//Artificial intelligence and statistics. PMLR, 2017: 1273-1282. 参考的文章: 1.联邦学习代码解读,超详细…

Object.defineProperty在Vue2双向绑定中的核心原理及应用

目录 1.Object.defineProperty方法 (1)介绍 (2)语法 (3)descriptor属性描述符 2.Object.defineProperty在Vue2双向绑定的核心原理 3.Object.defineProperty在vue2中的应用 (1&#xff09…

专业人士如何选?揭秘4款2024年常用的电脑录屏软件!

在这个数字化时代,无论是教学、演示、游戏直播还是软件操作,电脑录屏软件已经是我们日常工作中的好帮手。但市面上这么多的电脑录屏软件,要想挑一款既专业又好用的,还真是挺让人头疼的。今天,我们就来聊聊四款常用的电…

mybatis开启数据库的驼峰命名

在application.yml文件中添加 mybatis:configuration:map-underscore-to-camel-case: true

powerjob连接postgresql数据库(支持docker部署)

1.先去pg建一个powerjob-product库 2.首先去拉最新的包,然后找到server模块,把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…