配置ehCache:Cache为null

时间:2011-10-12 09:04:26

标签: java ehcache

我是新手使用任何缓存工具,我尝试使用ehcache ...在类路径中创建了我的ehcache.xml,其中包含<cache name="xyz" .../>条目。

但是当我尝试从我的一个servlet的init方法访问我的缓存“xyz”时,我得到null

 
cacheManger.getCache("xyz") // <= is "null"

虽然

 
cacheManager.getCacheNames() 

正在给我[xyz]

我使用以下代码:

 
EhCacheManager.create();
ehcManager = EhCacheManager.getInstance();

System.out.println("getCacheNames::---" +  Arrays.toString(ehcManager.getCacheNames())); //here I get "xyz"

cache = ehcManager.getCache("xyz"); // here cache is null
cache.getCacheEventNotificationService().registerListener(new EhCacheFlushEventListener());

任何想法......我错过了什么?

2 个答案:

答案 0 :(得分:1)

EhCache有CacheManager可用于获取缓存:

 
CacheManager manager = new CacheManager( "src/config/ehcache.xml" );
Cache cache = manager.getCache( "xyz" );
Element element = cache.get( "key1" );

以下是来自ehcache.org的more examples

答案 1 :(得分:1)

确保您的ehcache.xml位于类路径(根元素,而不是子包中) 如果您使用maven项目结构,则将其放在/ src / main / resources目录中。

代码对我有用:

CacheManager cm = CacheManager.getInstance();
if (cm != null)
{
  Set<String> cacheNames = new HashSet<String>(Arrays.asList(cm.getCacheNames()));
  LOG.debug("cacheNames: " + cacheNames);
  for(String cName: cacheNames)
  {
    LOG.debug("Cache: "+cm.getEhcache(cName));
  }
}

注意:我使用“getEhcache”方法而不是“getCache”

还要重新检查你的ehcache.xml配置,也许你缺少defaultCache元素,这里有一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache maxBytesLocalHeap="1024m">
 <sizeOfPolicy maxDepth="2000" />
 <defaultCache eternal="false" timeToLiveSeconds="600"/>
 <cache name="myCacheablePOJO" eternal="true" statistics="true">
  <searchable>
   <searchAttribute name="field1" />
   <searchAttribute name="field2" />
   <searchAttribute name="field3" />
  </searchable>
 </cache>
</ehcache>