专栏首页用户5521492的专栏SpringBoot 填坑 | Shiro 与 Redis 多级缓存问题

SpringBoot 填坑 | Shiro 与 Redis 多级缓存问题

前言

来自不愿意透露姓名的小师弟的第三篇投稿。这篇主要讲了,项目中配置了多缓存遇到的坑,以及解决办法。

发现问题

在一次项目实践中有实现多级缓存其中有已经包括了 Shiro 的 Cache ,本以为开启 redis 的缓存是一件很简单的事情只需要在启动类上加上 @EnableCaching 注解就会启动缓存管理了,但是问题出现了。

重要错误日志截图

java.lang.IllegalStateException: @Bean method ShiroConfig.cacheManager called as a bean reference for type [org.apache.shiro.cache.ehcache.EhCacheManager] but overridden by non-compatible bean instance of type [org.springframework.data.redis.cache.RedisCacheManager]. Overriding bean of same name declared in: class path resource [org/springframework/boot/autoconfigure/cache/RedisCacheConfiguration.class]

错误日志分析

看日志大概就发现一个非法状态异常,我们继续查看接下来的日志有一段非常的重要日志 Overriding bean of same name 翻译过来的意思是帮你重写了一个名字一样的 Bean,我再看看日志里有提到 RedisCacheManager 与我自己实现的 cacheManager 到这里我已经感觉到问题所在了,以下图为 RedisCacheManager 部分实现代码。和我自己的 Shiro 的 cacheManager 实现方法。

RedisCacheManager 部分源码

RedisCacheManager 部分源码

解决问题

有 Spring 基础的大家都应该还记得 Spring 不允许有相同的 Bean 出现。现在问题就在于 Redis 缓存管理器和 Shiro 的缓存管理器重名了,而这二者又是通过 Spring 管理,所以 Spring 读取这二者的时候,产生冲突了。解决问题的方法很简单:在自己实现 EhCacheManager 时把 @Bean 指定一个名字可以像这样 @Bean(name ="ehCacheManager" ),还有其他办法大家可以在想办法实现一下嘿嘿。

结语

虽然我们都知道 Spring 的报错是非常多的,但是在 Spring 的报错日志中查找问题所在是非常有用的,大部分的错误,日志都会给你反馈。

本文分享自微信公众号 - 一个优秀的废人(feiren_java),作者:nasus

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mybatis 缓存机制

    mybatis支持一、二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis的缓存实现原理;

    一个优秀的废人
  • 聊聊 mybatis 的缓存机制

    mybatis支持一、二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis的缓存实现原理;

    一个优秀的废人
  • 为什么我们做分布式使用 Redis ?

    绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里...

    一个优秀的废人
  • 让你的硬盘速度快40倍

    废话不多说 直接开干 原理:内存做硬盘的缓存。数据先进入缓存中,之后再延迟写入,机械硬盘使用提升最明显。 优缺点:不推荐台式机这样弄,因为他没有电池,他没有电池...

    用户1444933
  • Python爬虫常用的小技巧-伪造随机的User-Agent

    沈唁
  • @qualifier和@primary小记

    公司最近要将所有的项目微服务化,做成统一管理,小编负责当前项目的微服务改造工作,在接入spring-cloud的过程中不可避免的遇到一些有意思的事情,把他写下来...

    哲洛不闹
  • 编程王道,为「慢」不破

    最近一段时间,在团队中我发现好多程序员,尤其是初级或者新手程序员常常犯得的错误都很初级,经常犯一些编程中的大忌。不是没有能力做好,而是做事不细心,我一直在给他们...

    非著名程序员
  • 经典面试题-请举例解释@Required annotation?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Hanlp自然语言处理中的词典格式说明

    使用过hanlp的都知道hanlp中有许多词典,它们的格式都是非常相似的,形式都是文本文档,随时可以修改。本篇文章详细介绍了hanlp中的词典格式,以满足用户自...

    IT小白龙
  • React源码解析之PureComponet的浅比较

    前言: 在 React源码解析之updateClassComponent(下) 中提到了PureComponent的浅比较:

    进击的小进进

扫码关注云+社区

领取腾讯云代金券