java - JPA在一个请求过程中不更新数据

 mobiledu2502875267 发布于 2022-10-25 17:41

当前有A和B两个程序,A使用SpringBoot和JPA
功能如下:
A是个API服务,A通过消息队列向B发送操作命令,阻塞轮询等待B完成后更新数据库,A读取数据库得到最新状态并返回
A没有启用缓存

现在的问题是,当B更新数据库后,A得到的一直都是旧数据,只有重新请求该API,才能得到新数据。

伪代码如下:

sendCommand();
Future future = pool.submit(() -> {
    while (condition) {
        MyObj obj = myRepository.findOne(id);  //这里倒是可以取到新数据,不在同一线程的缘故?
        sleep(1000);
        if (obj.getStatus() == newStatus) 
            return true;
        }
    return false;
});

if (future.get(timeout, TimeUnit.SECONDS))
    myRepository.findByName(name);  //这里取到的总是旧数据,而实际上数据库已经更新了

请问这是什么原因,该如何解决

我假设myRepository.findByName(name)在我不知情的情况下使用了缓存,曾经试过myRepository.findByNameAndTime(name,time),让time每次都不同,让缓存不起作用,结果发现结果还是旧的。

补充:
后来又试了一下,另起一个线程来执行myRepository.findByName(name),能够得到新数据。请教原理和解决办法。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有