2015-11-26 52 views
0

我正在使用Spring緩存機制和SimpleCacheManager/ConcurrentMapCache。Spring Cache未在生產中清除

我正在使用Web服務來清除緩存,以下是代碼。

for(String cacheName : cacheManager.getCacheNames()){ 
     Cache cache =cacheManager.getCache(cacheName); 
     if(cache!=null){ 
      cache.clear(); 
     } 
    } 

當我打電話從本地虛擬機中的休息web服務的代碼,我可以看到它的清除緩存,可以看到,我們在與其他服務的數據庫完成的改變,但是對生產環境,web服務在日誌中返回200個狀態。但它仍然顯示舊數據。 生產時,我們有2臺服務器 我們必須重新啓動應用程序以刷新緩存並從數據庫獲取最新數據。

+0

想知道您使用了哪個緩存管理器? 我知道SimpleCacheManager沒有驅逐合約有一些限制。 http://docs.spring.io/spring-framework/docs/3.2.0.M1/reference/html/cache.html – Ithar

回答

1

我曾經這麼做過創建一個用@CacheEvict(allEntries = true)註釋的void方法,這個註解類似於JSR-107中的@CacheRemoveAll。

類似的東西:

@CacheEvict(allEntries=true) 
public void evictAll() { 
    // Do nothing 
} 

我知道,這是醜陋的,但工作給我。

我的兩分錢,避免使用生產中的默認彈簧緩存管理器,使用更復雜的緩存管理器,而不是像Guava或EhCache。

乾杯。

+0

咖啡因也是一個不錯的選擇(春季棄用番石榴贊成它https:// stackoverflow。 COM /問題/ 44175085 /爲什麼 - 彈簧棄用,番石榴緩存在官方文檔) – rvazquezglez