【问题标题】:cutom ehcache evict policy with spring使用 spring 自定义 ehcache 驱逐策略
【发布时间】:2013-12-08 02:49:57
【问题描述】:

如果我们想自定义除 LRU LFU FIFO 之外的驱逐策略,文档推荐的方式是实现接口 Policy 然后设置 MemoryStoreEvictionPolicy 如下:

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 方式注入自己的策略?

谢谢大家

【问题讨论】:

    标签: spring ehcache evict


    【解决方案1】:

    您最好实现自己的类,在 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>
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2023-03-10
      • 2021-06-02
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多