2

LRU LFU FIFO に加えてエビクト ポリシーをカスタマイズする場合、ドキュメントで推奨されている方法は、インターフェース Policy を実装してから、MemoryStoreEvictionPolicy を次のように設定することです。

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

しかし、春を使用した場合は、@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>

春の方法で自分のポリシーを挿入するにはどうすればよいですか?

皆さん、ありがとうございました

4

1 に答える 1

3

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>
于 2013-12-08T16:00:40.887 に答える