问题描述有一天,测试妹W给我提了一个BUG。问题描述如下。当动作D被操作时,动作D可以看作是一次更新。更新我当前选择的数据,妹子W看到操作D成功页面多了一条相同的数据。预期的结果是只会更新当前选中行的数据,不会增加多余的数据。问题原因一开始以为是代码有问题。检查代码,应该没有什么大问题。在正常操作动作D期间,会更新数据,不会增加冗余数据。但是当出现异常的时候,这个问题,又会出现,目前猜测应该是有什么相关的。下面我来解释一下actionD的业务逻辑,当我们点击actionD时,会先调用update操作来更新数据。这里的更新是先删除原来的数据,再重新插入数据。更新完成后,继续更新数据。下面执行其他逻辑。调试的时候发现事务在删除的逻辑上有回滚。唯一的问题是插入的数据没有回滚。我以为是Mybatisplus的一些特殊操作。原谅我当时的无知。我在谷歌上搜索过它。看了很多文章也没找到这个问题的原因。最后只能把这个bug搁置一旁,忙于修复其他的bug。一切都搞定后,我又看了看动作D的逻辑,看到了插入的逻辑。插入数据的逻辑我直接调用了同事写的方法。看到了BUG的原因,因为插入的数据可能很多,而那一段的逻辑使用了多线程数据插入。多线程影响事务回滚,事务无法回滚多线程数据。解决步骤发现问题后,当然要解决问题了。多线程影响事务回滚。那我就用最笨的方法重写一段插入数据的逻辑来解决这个事务问题。写完本地测试的代码,出现异常时,删除操作回滚数据,添加操作回滚数据,问题解决,发到测试环境让W姐再次测试,开心!总结这个问题,我浪费了很多时间,在网上找资料,掉头发,终于找到了问题的原因。事实证明我平时比较粗心,没有看清楚代码的逻辑。遇到问题,我第一时间做的不是看代码,而是上网找解决办法。这个坏习惯影响了我,在以后的工作中要避免这样的事情发生。还有一个问题就是用别人的代码一定要看中间的逻辑。别人使用没有问题,但不代表你那部分代码没有问题,所以你在工作中一定要小心。
