首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Myabtis Interceptor 线程安全引发的 Bug

最近业务部门的一位开发同事找过来说,自己在使用公司的框架向数据库新增数据时,新增的数据被莫名其妙的回滚了,并且本地开发环境能够复现这个问题。公司的框架是基于SpringBoot+Mybatis整合实现,按道理这么多项目已经在使用了, 如果是bug那么早就应该出现问题。我的第一想法是不是他的业务逻辑有啥异常导致事务回滚了,但是也并没有出现什么明显的异常,并且新增的数据在数据库中是可以看到的。于是猜测有定时任务在删数据。询问了这位同事,得到的答案却是否定的。没有办法,既然能本地复现那便是最好解决了,决定在本地开发环境跟源码找问题。刚开始调试时只设置了几个断点,代码执行流程一切正常,查看数据库中新增的数据也确实存在,但是当代码全部执行完成后,数据库中的数据却不存在了,程序也没有任何异常。继续深入断点调试,经过十几轮的断点调试发现偶尔会出现org.apache.ibatis.executor.ExecutorException: Executor was closed.,但是程序跳过一些断点时,就一切正常。在经过n轮调试未果之后,还是怀疑数据库有定时任务或者数据库有问题。于是重新创建一个测试库新增数据,这次数据新增一切正常,此时还是满心欢喜,至少已经定位出问题的大致原因了,赶紧找了DBA帮忙查询是否有SQL在删数据,果然证实了自己的想法。后来让这位开发同事再次确认是否在开发环境的机器上有定时任务有删除数据的服务。这次尽然告诉我确实有定时任务删数据,问题得以解决,原来他是新接手这个项目,对项目不是很熟悉,真的。。。。。。

01
领券