2013-01-04 76 views
0

我已經使用了@Cachable@cachable問題 - 方法不緩存

@Cacheable(value="airport", key="#filter") 
public static String getAirport(String filter, SessionFactory sessionFactory){ 
    String airportsDisplay = ""; 
    Session session = sessionFactory.openSession(); 
    airportsDisplay = (String) session.createQuery("select iata from Airports a where a.displaystr = :accfilter").setString("accfilter", filter.toUpperCase()).uniqueResult(); 
    session.close(); 
    return airportsDisplay; 
} 

它所做的是一個數據庫查詢與給定的過濾器和返回機場名稱的方法。

的XML configuratin是

<cache name="airport" 
    maxElementsInMemory="100" 
    eternal="false" 
    timeToIdleSeconds="1200" 
    timeToLiveSeconds="1200" 
    overflowToDisk="true" 
    maxElementsOnDisk="10000000" 
    diskPersistent="true" 
    diskExpiryThreadIntervalSeconds="1200" 
    memoryStoreEvictionPolicy="LRU"/> 

的問題是,它不緩存的結果!

部署時airport.data被正常創建,但無論從我的web應用程序調用方法多少次都始終爲空。

Anny的建議?

回答

5

此方法是靜態的,所以它不是Spring bean的一部分,Spring不能攔截對方法的調用並返回緩存結果而不是調用它。只有Spring bean方法可以被緩存。

+0

因此,如果我刪除靜態關鍵字和註釋類@Service它將工作? –

+0

是的,如果您將此服務的實例注入調用的Spring bean(或使用bean工廠獲取對該服務的引用),它將起作用。當然,你也需要配置緩存。 –

+0

它做到了!謝了哥們! –