首页 文章

Apache Shiro EhCache初始化异常:另一个未命名的CacheManager已经存在于同一个VM中

提问于
浏览
5

我试图让EhCache配置为在我启用Apache Shiro的Web服务中处理授权缓存 . 目前我收到以下异常:

org.apache.shiro.cache.CacheException:net.sf.ehcache.CacheException:另一个未命名的CacheManager已存在于同一个VM中 . 请为配置中的每个CacheManager提供唯一的名称,或执行以下操作之一:1 . 使用其中一个CacheManager.create()静态工厂方法重用相同名称的相同CacheManager,或者在必要时创建一个.2 . 在创建之前关闭先前的cacheManager新的同名 .

我的shiro.ini看起来像:
[主要]
...
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
    

相关问题