搜尋

首頁  >  問答  >  主體

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中文网2804 天前635

全部回覆(0)我來回復

無回覆
  • 取消回覆