찾다

 >  Q&A  >  본문

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

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

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

伪代码如下:

sendCommand();
Future<Boolean> 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),能够得到新数据。请教原理和解决办法。

PHP中文网PHP中文网2813일 전644

모든 응답(0)나는 대답할 것이다

답장 없음
  • 취소회신하다