奇奇怪怪小问题-已经存在一个未命名的CacheManager
实例
在一个现有项目中我需要添加功能并使用到缓存,但是该项目仅使用了ehcache缓存,因此,踩了一个坑。
原本我是这么写的
// 用于EHCache的缓存管理器
private static CacheManager cacheManager = CacheManager.create();
// 用于EHCache的缓存对象
private static Cache accessTokenCache = cacheManager.getCache("accessTokenCache");
问题来了,运行时出现Another unnamed CacheManager already exists in the same VM.
已经存在一个未命名的CacheManager
实例。搜索了一下,问题大概是shiro每次早于EhCacheCacheConfiguration去构造对象,当shiro中已经构造了cacheMangaer时,后面再重复构造就会抛出异常。
从理论上来讲,既然是未命名的CacheManager冲突,那就指定名称就好了。但是试了搜索的几种方案,该怎么不行还是怎么不行,找到了另外的一个方案
不使用 net.sf.ehcache,改成使用 com.google.common.cache
......
private static Cache<String, String> accessTokenCache;
static {
accessTokenCache = CacheBuilder.newBuilder()
.expireAfterWrite(6000, TimeUnit.SECONDS) // 设置缓存过期时间为6000秒
.build();
}
......