Ehcache缓存服务器+ BlockingCache?

时间:2012-02-11 04:34:22

标签: ehcache

是否可以使用Ehcache缓存服务器并使用blockingCache进行配置?我似乎无法找到如何在ehcache.xml文件中配置它...只是以编程方式。

2 个答案:

答案 0 :(得分:6)

要通过ehcache.xml使用BlockingCache作为缓存的默认装饰器,首先应该实现自己的CacheDecoratorFactory,比如它的DefaultCacheDecoratorFactory:

public class DefaultCacheDecoratorFactory extends CacheDecoratorFactory {
    @Override
    public Ehcache createDecoratedEhcache(Ehcache cache, Properties properties) {
        return new BlockingCache(cache);
    }

    @Override
    public Ehcache createDefaultDecoratedEhcache(Ehcache cache, Properties properties) {
        return new BlockingCache(cache);
    }
}

然后将其配置为缓存定义的一部分,如下所示:

<cache name="CACHE_NAME" more values here.../>
    <cacheDecoratorFactory class="whatsoever.DefaultCacheDecoratorFactory"/>
</cache>

使用cacheManager.getEhCache()访问cacheManager.getCache()以外的缓存,因为它只为装饰缓存返回null。

答案 1 :(得分:1)

您可以通过编程方式声明已修饰的缓存,但也可以在配置中,请参阅: http://ehcache.org/documentation/apis/cache-decorators#by-configuration

您需要添加一个net.sf.ehcache.constructs.CacheDecoratorFactory实现,它可以满足您的需求。我想你可能会对传递给net.sf.ehcache.constructs.CacheDecoratorFactory #createDecoratedEhcache的Ehcache实例进行一些模式匹配,并返回null或BlockingCache修饰的缓存实例。

谨慎的是,确保在未命中时,总是将(甚至为空)放回缓存中,否则该密钥/段的写锁定将不会被解锁。