cutom-ehcache驱逐政策与春天



如果我们想在LRU LFU FIFO之外自定义驱逐策略,文档建议的方式是实现接口策略,然后设置MemoryStoreEvctionPolicy,如:

manager = new CacheManager(EHCACHE_CONFIG_LOCATION);
cache = manager.getCache(CACHE_NAME);
cache.setMemoryStoreEvictionPolicy(new MyPolicy());

但如果我使用spring,请使用@cacheable和之类的xml文件

<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml" ></property>
</bean>

<!-- cacheManager -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager" ref="cacheManagerFactory" />
</bean>

我该如何在春季推出自己的政策?

感谢所有

您最好实现自己的类,该类在Spring初始化时设置缓存上的驱逐策略。

例如:

public class MyEvictionPolicySetter implements InitializingBean {
    public static final String CACHE_NAME = "my_cache";
    private CacheManager manager;
    private Policy evictionPolicy;
    @Override
    public void afterPropertiesSet() {
        Cache cache = manager.getCache(CACHE_NAME);
        cache.setMemoryStoreEvictionPolicy(evictionPolicy);
    }
    public void setCacheManager(CacheManager manager) {
        this.manager = manager;
    }
    public void setEvictionPolicy(Policy evictionPolicy) {
        this.evictionPolicy = evictionPolicy;
    }
}

然后在您的Spring配置中:

<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml" ></property>
</bean>
<!-- Specify your eviction policy as a Spring bean -->
<bean id="evictionPolicy" class="MyPolicy"/>
<!-- This will set the eviction policy when Spring starts up -->
<bean id="evictionPolicySetter" class="EvictionPolicySetter">
    <property name="cacheManager" ref="cacheManagerFactory"/>
    <property name="evictionPolicy" ref="evictionPolicy"/>
</bean>

最新更新