0

我有一个使用@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配置是

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

问题是它不缓存结果!

在部署时,airport.data 会正常创建,但无论我从 Web 应用程序调用该方法多少次,它总是为空。

有什么建议吗?

4

1 回答 1

5

此方法是静态的,因此它不是 Spring bean 的一部分,Spring 无法拦截对该方法的调用并返回缓存结果而不是调用它。只有 Spring bean 方法可以被缓存。

于 2013-01-04T09:07:48.037 回答