报错摘要:
Caused by: java.lang.NullPointerException: null
assertNoCacheManagerExistsWithSameName
源码摘要内容:
final String msg = "Another "
+ (isNamed ? "CacheManager with same name '" + name + "'" : "unnamed CacheManager")
+ " already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:\n"
+ "1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name"
+ " or create one if necessary\n"
+ "2. Shutdown the earlier cacheManager before creating new one with same name.\n"
+ "The source of the existing CacheManager is: "
+ (configurationSource == null ? "[Programmatically configured]" : configurationSource);
问题原因:
CacheManager多次创建实例,查阅资料很多人说ehcache2.5 之后的版本只支持单例模式,多次创建就会报错。
解决方案:
1、资料说降低ehcache版本,方法比较生硬,甚至要改配置,还有可能造成和其它依赖包不兼容的情况。
2、以SpringBoot为例,将CacheManager实例化过程改成单例模式,
@Bean(name="cacheManager")
CacheManager cacheManager(){
net.sf.ehcache.CacheManager cacheManager = net.sf.ehcache.CacheManager.getCacheManager("shiro-activeSessionCache");
if(cacheManager==null){
try {
cacheManager = net.sf.ehcache.CacheManager.create(ResourceUtils.getInputStreamForPath("classpath:config/cache/ehcache.xml"));
} catch (CacheException e) {
// TODO Auto-generated catch blocke.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
}
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManager(cacheManager);
return ehCacheManager;
}
思路来源:shiro加入Ehcache缓存 热部署启动 CacheManager es重复问题www.jianshu.com