是否可以使用Ehcache缓存服务器并使用blockingCache进行配置?我似乎无法找到如何在ehcache.xml文件中配置它...只是以编程方式。
答案 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修饰的缓存实例。
谨慎的是,确保在未命中时,总是将(甚至为空)放回缓存中,否则该密钥/段的写锁定将不会被解锁。