Apache Shiro EhCache初始化异常:同一虚拟机中已经存在另一个未命名的CacheManager。

5
我正在尝试将EhCache配置为处理Apache Shiro启用的Web服务中的授权缓存。目前,我遇到以下异常:
org.apache.shiro.cache.CacheException: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
1.使用CacheManager.create()静态工厂方法之一来重用具有相同名称的同一CacheManager或在必要时创建一个
2.在创建具有相同名称的新缓存管理器之前关闭先前的缓存管理器。
我的shiro.ini文件如下:
[main]   
...    
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager 
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml  
securityManager.cacheManager = $cacheManager 

从这篇StackOverflow帖子中可以看出,使用Spring的人们通过强制CacheManager成为单例来解决了这个问题:Another unnamed CacheManager already exists in the same VM (ehCache 2.5)
是否有人知道不使用Spring初始化的解决方法(我正在dropwizard框架中工作,不需要引入Spring)?是否有一些从shiro.ini中强制实现单例配置的方式?
提前谢谢!
1个回答

3

创建一个自定义类,继承EhCacheManager并在构造函数中设置你的cacheManager。这样(net.sf.ehcache.CacheManager.create())可以让你重用已经存在的缓存管理器。

package lekkie.omotayo

public class MyShiroCacheManager extends EhCacheManager
{

    public CacheManager()
    {
        setCacheManager(net.sf.ehcache.CacheManager.create());
    }
}

然后你可以这样做:
cacheManager = lekkie.omotayo.MyShiroCacheManager
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml
securityManager.cacheManager = $cacheManager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接