簡體   English   中英

Spring數據發現未獲取最新數據

[英]Spring data findone not fetching latest data

我為我的應用程序配置了spring數據,其中DAO接口將org.springframework.data.repository.CrudRepository擴展為執行者簡單的數據庫操作。 DAO的findOne(id)方法之一不返回表的最新記錄,即使我的數據庫具有最新數據也是如此。 它總是返回記錄的舊版本。 沒有為應用程序配置緩存。 是否有任何默認的JPA級別緩存會阻止其返回最新數據?

編輯:保存記錄后,我正在調用em.flush(),因此對findOne(id)的后續調用必須給我最新的記錄。

但是,我看到了一個潛在的問題,我的整個應用程序都在集群環境中運行,因此調用em.flush()可能僅在一個要更新數據的節點中刷新數據,而其他所有節點可能仍然具有舊數據。可能導致隨后調用findOne(id)方法的數據正在通過其他可能尚未發生刷新的節點。 有沒有一種方法可以跨節點刷新,或者是否有默認超時可以自動刷新數據?

您可以嘗試為休眠禁用二級緩存 在您使用集群環境時,根據我的理解,當您創建/更新任何內容時,它都會更新請求所在的一個集群的緩存,而不會更新另一個集群。 但是,當您嘗試獲取相同的記錄並且您的請求轉到另一個群集時,它將為您提供舊記錄,而不是最新記錄。

您可以使用以下配置:

jpa:
  properties:
    hibernate:
      #################### HIBERNATE EHCACHE ####################
      #Disable second level cache for hibernate
      cache:
        use_second_level_cache: false
        auto_evict_collection_cache: false
        region:
          factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
        use_query_cache: true

另外,除了使用findOne()方法之外,還應該像2.0版本一樣使用findById() ,Spring-Data-JPA修改了findOne(),現在它返回了Optional。 防止NullPointerException並不是很糟糕。

請參閱此以獲取更多信息。

如果我弄錯了,請糾正我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM