我有一个使用@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会正常创建,但无论我从我的网络应用程序调用该方法多少次,它总是为空。
Anny建议?
答案 0 :(得分:5)
此方法是静态的,因此它不是Spring bean的一部分,Spring不能拦截对方法的调用并返回缓存结果而不是调用它。只有Spring bean方法可以缓存。