我正在尝试将 EhCache 配置为处理启用 Apache Shiro 的 Web 服务中的授权缓存。目前我收到以下异常:
org.apache.shiro.cache.CacheException:net.sf.ehcache.CacheException:同一虚拟机中已存在另一个未命名的 CacheManager。请为配置中的每个 CacheManager 提供唯一的名称或执行以下操作之一:
- 使用 CacheManager.create() 静态工厂方法之一来重用具有相同名称的同一个 CacheManager,或者在必要时创建一个
- 在创建同名的新缓存管理器之前,请关闭早期的缓存管理器。
我的 shiro.ini 看起来像:
[main]
...
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
cacheManager.cacheManagerConfigFile = classpath:ehcache.xml
securityManager.cacheManager = $cacheManager
从 StackOverflow 的这篇文章来看,使用 Spring 的人们已经通过强制 CacheManager 成为单例来解决这个问题:同一虚拟机中已存在另一个未命名的 CacheManager (ehCache 2.5) https://stackoverflow.com/questions/10013288/another-unnamed-cachemanager-already-exists-in-the-same-vm-ehcache-2-5.
有人知道不使用 Spring 初始化的解决方法吗(我在 dropwizard 框架内工作,不需要引入 Spring)?是否有某种方式从 shiro.ini 强制执行单例配置?
先感谢您!
创建一个扩展 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)