Java 求助个问题

2022-06-17 11:59:40 +08:00
 xjngbla

今天遇到一个很诡异的问题,调试代码的时候发现查到的数据和库中的数据不一样(像是过时的数据,比如一个字符串,部分匹配的上,但是不全),且插入和更新数据都无效,但是直接写 sql 可以正常操作数据库,比如我走了一遍更新状态接口,数据库实际并没有更新数据,但是代码里再查未更新状态的数据,居然查不到之前更新的那条数据了 springcloud + mybatis + mysql

2425 次点击
所在节点    程序员
18 条回复
yumc
2022-06-17 12:16:30 +08:00
这种问题,大多是使用不正确或不细心。只有贴关键代码才能看出来咯
newaccount
2022-06-17 13:16:26 +08:00
猜不出来,可能:
1. 执行到断点的时候 session 还没提交?
2. 试试关掉 mybatis 一级二级缓存?
devswork
2022-06-17 13:31:33 +08:00
我感觉就是你数据库工具里连接的数据库 和 spring 项目里的数据库连接不是同一个,哈哈哈哈
xjngbla
2022-06-17 13:40:14 +08:00
@newaccount #2 谢谢,我试试
xjngbla
2022-06-17 13:40:26 +08:00
@devswork #3 这个不可能
notwaste
2022-06-17 15:29:20 +08:00
会不会是加了事务 方法没执行完就跟去数据库对比了?
Suddoo
2022-06-17 15:54:07 +08:00
一面之辞,说不清

或许服务有多个实例,接受请求的实例运行的代码逻辑和你本地的代码不一样,查出来的数据当然不一样

或许……
xjngbla
2022-06-17 15:56:04 +08:00
@Suddoo #7 所有服务都连接的同一个库
87B3F508
2022-06-17 16:06:51 +08:00
是不是事务设置成 readOnly 了?
pigspy
2022-06-17 16:09:02 +08:00
检查下是不是经过了缓存,比如用了 @Cacheable 这种东西
tobepro
2022-06-17 16:15:51 +08:00
按照我之前出类似问题的经验。越诡异的问题一般都是因为一些低级问题导致的。好好仔细检查本地配置和服务器配置。肯定能发现问题。
xwayway
2022-06-17 16:24:48 +08:00
你别 debug 啊,你直接把你服务的 sql 打出来,坑定是你 debug 到真实执行的过程中,数据被某些东西例如楼上提到的 缓存,readonly ,aop 等东西改了
ohmycorolla
2022-06-17 17:54:10 +08:00
1.是否有缓存
2.你以为对应的是这条数据,其实并不是
speedofstephen
2022-06-17 18:00:51 +08:00
感觉就是 2 楼说的问题啊。 你开事务了么, 如果开启了, 事务是在方法执行完提交的。 现在我有点生疏了,讲不好。建议百度以下脏读幻读
Jooooooooo
2022-06-17 18:03:25 +08:00
你是不是 debug 打断了流量, 没跑完.
tianyu94
2022-06-17 22:21:08 +08:00
我最近遇到一个,时序数据库存数据,动态 SQL 插入数据报语法错误,但是把输出的日志复制出来执行却可以。后面发现有特殊的 UTF8 字符(比如 `\u0000`)这种,替换了这种才解决。
luckyman
2022-06-17 23:01:28 +08:00
让大家猜谜语呢?
panerai
2022-06-18 00:13:52 +08:00
总结一下就是:
1. 事务没处理好
2. 缓存
3. 配置不对,连的不是同一个库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/860251

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX