V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xjngbla
V2EX  ›  程序员

Java 求助个问题

  •  
  •   xjngbla · 2022-06-17 11:59:40 +08:00 · 2416 次点击
    这是一个创建于 883 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    或许……
    xjngbla
        8
    xjngbla  
    OP
       2022-06-17 15:56:04 +08:00
    @Suddoo #7 所有服务都连接的同一个库
    87B3F508
        9
    87B3F508  
       2022-06-17 16:06:51 +08:00
    是不是事务设置成 readOnly 了?
    pigspy
        10
    pigspy  
       2022-06-17 16:09:02 +08:00
    检查下是不是经过了缓存,比如用了 @Cacheable 这种东西
    tobepro
        11
    tobepro  
       2022-06-17 16:15:51 +08:00   ❤️ 2
    按照我之前出类似问题的经验。越诡异的问题一般都是因为一些低级问题导致的。好好仔细检查本地配置和服务器配置。肯定能发现问题。
    xwayway
        12
    xwayway  
       2022-06-17 16:24:48 +08:00
    你别 debug 啊,你直接把你服务的 sql 打出来,坑定是你 debug 到真实执行的过程中,数据被某些东西例如楼上提到的 缓存,readonly ,aop 等东西改了
    ohmycorolla
        13
    ohmycorolla  
       2022-06-17 17:54:10 +08:00
    1.是否有缓存
    2.你以为对应的是这条数据,其实并不是
    speedofstephen
        14
    speedofstephen  
       2022-06-17 18:00:51 +08:00
    感觉就是 2 楼说的问题啊。 你开事务了么, 如果开启了, 事务是在方法执行完提交的。 现在我有点生疏了,讲不好。建议百度以下脏读幻读
    Jooooooooo
        15
    Jooooooooo  
       2022-06-17 18:03:25 +08:00
    你是不是 debug 打断了流量, 没跑完.
    tianyu94
        16
    tianyu94  
       2022-06-17 22:21:08 +08:00
    我最近遇到一个,时序数据库存数据,动态 SQL 插入数据报语法错误,但是把输出的日志复制出来执行却可以。后面发现有特殊的 UTF8 字符(比如 `\u0000`)这种,替换了这种才解决。
    luckyman
        17
    luckyman  
       2022-06-17 23:01:28 +08:00 via iPhone
    让大家猜谜语呢?
    panerai
        18
    panerai  
       2022-06-18 00:13:52 +08:00
    总结一下就是:
    1. 事务没处理好
    2. 缓存
    3. 配置不对,连的不是同一个库
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2607 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:57 · PVG 12:57 · LAX 20:57 · JFK 23:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.