BUG记录-多线程对事务的影响有多么大?-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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

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

问题描述

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

问题原因

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

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

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

解决步骤

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

总结

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章