我是新手使用任何缓存工具,我尝试使用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());
任何想法......我错过了什么?
答案 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>