我正在使用ehcache.我正在缓存Spring @Service方法:
@Service( value = "dataServicesManager" )
@Transactional
public class DataServicesManager implements IDataServicesManager{
@Autowired
private IDataDAO dataDAO;
@Override
@Cacheable( value = "alldatas" )
public List<Data> getAllDatas(Integer param) {
// my logic
return results;
}
// others services
}
这是Spring配置代码段:
<cache:annotation-driven/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="WEB-INF/ehcache.xml"/>
<property name="shared" value="true"/>
</bean>
这是我的ehcache配置.
<ehcache xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<diskStore path="C:/TEMP/ehcache"/>
<defaultCache eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="1200"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120" />
<cache name="alldatas" maxEntriesLocalHeap="10000" eternal="false"
timeToIdleSeconds="21600" timeToLiveSeconds="21600" memoryStoreEvictionPolicy="LRU">
</cache>
</ehcache>
当我从Spring @Controller调用服务方法getAllDatas时,方法被缓存,第二次调用在缓存中检索结果存储.
我不明白的是我找不到< diskStore path =“C:/ TEMP / ehcache”/>在ehcache.xml中指定.所以我有两个问题:
问题1:为什么不创建“C:/ TEMP / ehcache”目录?
问题2:我的服务结果缓存在哪里?
解决方法:
你的Ehcache配置是罪魁祸首.
defaultCache元素仅在以编程方式创建缓存而不指定配置时使用.
但是您明确定义了alldatas缓存,没有任何磁盘选项.
所以你的配置需要成为:
<cache name="alldatas" maxEntriesLocalHeap="10000" eternal="false"
timeToIdleSeconds="21600" timeToLiveSeconds="21600" memoryStoreEvictionPolicy="LRU"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120">
</cache>
然后这个缓存将使用磁盘存储.
如果您不打算在应用程序中使用其他缓存,则还可以删除defaultCache元素以便清楚.