BUG记录-多线程对事务的影响有多么大?

问题描述

有一天,测试妹子W向我提了一个BUG,问题描述如下,当操作动作D时,动作D可以看作更新,更新我当前选择的那一条数据,妹子W看到操作D成功页面中多出一条一样的数据,期望的结果是只会更新当前选择行的数据,并不会新增多余的数据。

问题原因

开始的时候,我认为代码有问题,查看一下代码,应该没有太大的问题,普通操作动作D时,数据会更新,不会新增多余的数据,但是在出现异常时,这个问题,就会复现出来,我当前猜想应该有事务有关系。

现在我先说明一下,动作D的业务逻辑,当我们点击动作D时,首先会调用更新操作,更新数据,此处的更新为先删除原先的数据,后重新插入数据,更新结束后,继续向下执行其它逻辑。在我Debug的时候,发现在删除的逻辑上事务有回滚,唯一的是插入数据竟没有回滚,我以为是Mybatis plus有什么特殊的骚操作,原谅当时无知的我,我在Google上找了好多文章就是没找到这个问题产生的原因。最后,只能把这个BUG先放一边,忙着修复其它Bug。

当我把所有的事情都忙完了,我又重新看了动作D的逻辑,看到插入的逻辑,这个插入数据的逻辑我是直接调用同事写好的方法,我看到产生BUG的原因,因为插入的数据有可能有许多,那段的逻辑使用了多线程插入数据。多线程影响事务回滚,事务没办法回滚多线程的数据。

解决步骤

发现问题后,当然要解决问题,多线程影响事务回滚,那我就用最笨的方法,重新写一段插入数据的逻辑,解决这个事务问题。写完代码本地测试,当出现异常时,删除操作回滚数据,新增操作回滚数据,解决完问题,发到测试环境让妹子W再测试一遍,美滋滋!

总结

这个问题,浪费了我许多时间,上网找资料,还有掉头发,最后才发现问题的原因,事实说明我平时粗心大意,没有看清楚代码的逻辑,遇到问题首先不是看代码,而是上网找解决方法。这个坏习惯影响着我,以后的工作中应该避免这类事情的出现。还有一个问题,就是使用别人的代码一定要看中间的逻辑,别人使用没有问题,并不代表你使用那部分代码也没有问题,所以工作中要仔细。

posted @   薛尧笔记  阅读(218)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
薛尧的博客
点击右上角即可分享
微信分享提示