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

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

问题描述

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

问题原因

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

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

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

解决步骤

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

总结

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

相关文章
|
3月前
|
缓存 数据库
并发修改同一记录时需要加锁
并发修改同一记录时需要加锁
|
监控 Oracle 安全
Oracle数据库用户频繁被锁问题原因排查及解决
由于应用环境下Oracle用户总是频繁被锁,经常不能执行数据库事务操作,严重影响了系统运行效率。通过问题原因分析及排查,发现了原因,在此记录一下。
3949 0
Oracle数据库用户频繁被锁问题原因排查及解决
|
7月前
|
Go 数据库
sync.Once-保证运行期间的某段代码只会执行一次
sync.Once-保证运行期间的某段代码只会执行一次
42 0
|
3月前
|
算法
出现线程死锁缺陷一般有那些原因?该怎么解决?
出现线程死锁缺陷一般有那些原因?该怎么解决?
29 1
|
7月前
|
关系型数据库 MySQL 数据库
并发事务更新问题
并发事务更新问题
33 0
|
8月前
什么条件下会产出死锁,如何避免死锁?
一个去美团面试的小伙伴私我说,被面试官问到一个死锁的问题难道了,面试前还特意刷了题,面试的时候就是脑子一片空白不知道怎么回答。今天,我给大家彻底讲明白。
54 1
什么条件下会产出死锁,如何避免死锁?
|
10月前
|
前端开发 关系型数据库 MySQL
用户重复注册分析-多线程事务中加锁引发的bug
用户重复注册分析-多线程事务中加锁引发的bug
120 0
|
10月前
|
关系型数据库 MySQL Java
多线程执行事务中再加锁导致的bug----------记一次线上问题优化
多线程执行事务中再加锁导致的bug----------记一次线上问题优化
62 0
|
Java API
【JAVA并发编程专题】死锁的修复和定位
【JAVA并发编程专题】死锁的修复和定位

相关实验场景

更多