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

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

问题描述

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

问题原因

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

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

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

解决步骤

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

总结

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

相关文章
|
SQL Java 数据库连接
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
联表查询 && 索引 && 事务 && JDBC使用 &&CPU工作原理 && 线程概念 && Thread类的用法
159 0
|
3月前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
2月前
|
SQL 存储 监控
SQLServer事务复制延迟优化之并行(多线程)复制
【9月更文挑战第12天】在SQL Server中,事务复制延迟会影响数据同步性。并行复制可通过多线程处理优化这一问题,提高复制效率。主要优化方法包括:配置分发代理参数、优化网络带宽、调整系统资源、优化数据库设计及定期监控维护。合理实施这些措施可提升数据同步的及时性和可靠性。
|
6月前
|
数据库连接 数据库
多线程事务失效的原因
【5月更文挑战第16天】多线程事务失效的原因
384 0
|
消息中间件 JavaScript 小程序
SpringBoot 使用线程池如何控制主线程和子线程的事务
SpringBoot 使用线程池如何控制主线程和子线程的事务
|
XML Java 数据库
Spring在多线程环境下如何确保事务的一致性?
Spring在多线程环境下如何确保事务的一致性?
543 1
|
消息中间件 JavaScript 小程序
多线程如何实现事务回滚?一招帮你搞定!
多线程如何实现事务回滚?一招帮你搞定!
多线程如何实现事务回滚?一招帮你搞定!
|
前端开发 关系型数据库 MySQL
用户重复注册分析-多线程事务中加锁引发的bug
用户重复注册分析-多线程事务中加锁引发的bug
142 0
|
关系型数据库 MySQL Java
多线程执行事务中再加锁导致的bug----------记一次线上问题优化
多线程执行事务中再加锁导致的bug----------记一次线上问题优化
91 0
|
开发框架 Java 关系型数据库
面试官:Java 多线程怎么做事务控制?一半人答不上来-1
面试官:Java 多线程怎么做事务控制?一半人答不上来。。
359 0
面试官:Java 多线程怎么做事务控制?一半人答不上来-1