@Transactional中异步方法使用注意事项

news/2025/2/22 3:44:25/文章来源:https://www.cnblogs.com/LiuFqiang/p/18715717

如果使用了@Async异步方法上面添加了@Transactional,那这个事务是不会生效的
场景复现:
@Transactional 基于MethodInterceptor实现的,所以在方法执行完毕之后才会提交事务

上面代码前面操作位正常保存或者更新操作,代码最后调用了一个异步方法,这个异步方法为了避免主从延迟,直接查询了主库刚才保存的信息,但是有时候能查询到,有时候查询不到数据,
简单分析后,异步线程开始查询的时候,有几率主线程的事务还未提交完成,当前数据库的隔离级别为可重复读,异步线程有很大概率还是读取不到数据的,
解决办法:
应对这个问题第一种方法
可以将异步方法改为异步延迟队列,等待几秒之后可以直接查询从库,这时候按道理会查询到数据的,
第二种方法
捕获异步方法里面的异常,如果发现抛出的异常是记录不存在,可以进行重试,
但是这种方法都不确保也不稳妥,方法1可能延迟时间控制不好,方法2可能重复执行多次
在AbstractPlatformTransactionManager中可以找到在事务的生命周期中提供了很多的扩展接口,我们可以在扩展接口上做处理

可以根据自己需要实现TransactionSynchronization的方法,其中afterCommit方法表示事务提交成功之后调用的方法,这个时候事务已经持久化,我们可以在这个里面直接调用异步方法
修改后的方法如下:

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {@Overridepublic void afterCommit() {async();}});

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子查询和连表查询的比较

在需求中,要求对一个查询sql中根据主表的id展示该主表id关联的研发项目信息。一开始我使用了连表查询,但是存在一对多的关系,使用了group by进行分组。但是造成了数据分组后,原sql查询的数据量不对。故不能直接连表查询,而使用了子查询。 连表查询:在连表查询中,可能存…

【入门必看】人工智能就该这样学!一文盘点人工智能全栈工程师学习路径

随着人工智能技术的不断发展,人工智能应用场景越来越多,企业人才需求也越来越大。很多人都想进入AI这个高薪领域,包括理工科背景的学生、程序员、工程师、甚至是非科班跨领域的从业人员等等。但AI知识体系庞杂,网上资料零散,很多初学者不知道从哪儿下手,又担心自己学不会…

教会你如何使你的桌面炫酷起来

CTM工具是一款专为Windows用户设计的系统优化工具,它能够显著提升桌面美观度和系统性能。任务栏透明化:用户可以一键切换任务栏为全透明或毛玻璃效果,提升桌面美观度。资源监控:该功能与鲁大师的硬件监控功能相似,显示当前硬件使用状况,同时支持对字体大小、位置以及透明…

MySQL技术公开课:Mysql-Server-8.4.4 Innodb 集群搭建与维护

MySQL技术公开课 - Mysql-Server-8.4.4 Innodb 集群搭建与维护 讲课内容: 1、Innodb集群框架介绍 2、Innodb集群部署(mysql-Server、mysql-shell、mysql-router安装配置) 3、Innodb集群维护(主备切换、启动与关闭、故障排除) Mysql-server商业版目前最新的是8.4.4,增加了新功…

SM4算法

概述 SM4算法是我国发布的商用密码算法中的分组密码算法。为配合WAPI无线局域网标准的推广应用,SM4算法于2006年公开发布,并于2012年3月发布为密码行业标准,2016年8月转化为国家标准GB/T 32907-2016《信息安全技术SM4分组密码算法》​。 SM4分组密码算法是一个迭代分组密码算…

KVM之virsh管理虚拟机

一、虚拟机管理操作 1.1 虚拟机状态 通过 virsh 管理虚拟机,虚拟机的状态显示为以下几种: runing 是运行状态 idel 是空闲状态 pause 暂停状态 shutdown 关闭状态 crash 虚拟机崩坏状态 daying 垂死状态 shut off 不运行完全关闭 …

LinkCutTree LCT

讲解 LCT。更新日志 2025/02/14:开工。概念 LCT 可以解决动态树下树链信息的维护。 动态树的意思是可以动态割边、连边。 首先我们将讲解整体思路,然后对各个函数依次介绍。 LCT 的均摊复杂度为 \(O(n\log n)\) 的,证明复杂,所以这里全部掠过,保证复杂度的操作都会提出。 …

分享一个用于免费取名chrome插件

這是一個幫助父母為寶寶取名的 Chrome 擴充功能,基於八字命理為寶寶打造獨特而富有寓意的名字。 功能特點支持輸入寶寶姓氏 可選擇寶寶性別(男寶寶/女寶寶) 可選擇名字長度(二字名/三字名) 支持輸入出生日期和時辰 提供多種期望寓意選擇 支持自定義期望寓意 完全繁體中文…

100N03-ASEMI豆浆机专用MOS管100N03

100N03-ASEMI豆浆机专用MOS管100N03编辑:ll 100N03-ASEMI豆浆机专用MOS管100N03 型号:100N03 品牌:ASEMI 封装:TO-252 最大漏源电流:100A 漏源击穿电压:30V 批号:最新 RDS(ON)Max:5.0mΩ 引脚数量:3 沟道类型:N沟道MOS管 芯片尺寸:MIL 漏电流: 恢复时间:ns 芯片…

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型,以及其与 LLM(Large Language Model)的异同和协同关系。接着列举了实战与应用的案例,包括使用 ChatGPT 生成的样本微调 NLLB-200 和使用 NLLB-200 的翻…

段码液晶显示屏驱动芯片/LCD驱动控制器-VK1072B SOP28可最大支持184的LCD屏

产品品牌:永嘉微电/VINKA 产品型号:VK1072 封装形式:SOP28 概述 VK1072B是一个点阵式存储映射的LCD驱动器,可支持最大 72点(18SEGx4COM)的LCD屏,也支持2COM和3COM的 LCD屏。单片机可通过三条通信线配置显示参数和发送显示 数据,也可通过指令进入省电模式。LJQ4073特点 •…

通义灵码插件下载量破千万!感谢大家的喜爱

近年来,人工智能技术以惊人的速度发展,尤其是大模型技术的突破,为 AI 在编程领域的应用注入了全新动力。从代码补全到全流程软件开发,从自然语言生成代码到AI 程序员的上线,大模型正在重构传统的编程范式,推动 AI 编码全面落地,也重新定义了人与 AI 的协作开发模式。近年…