奇奇怪怪小问题-已经存在一个未命名的`CacheManager`实例

奇奇怪怪小问题-已经存在一个未命名的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();
    }
......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值