javascript
八年开发程序员浅析SpringBoot 之 Shiro 与 Redis 多级缓存问题
前言
來(lái)自不愿意透露姓名的小師弟的投稿。這篇主要講了,項(xiàng)目中配置了多緩存遇到的坑,以及解決辦法。
發(fā)現(xiàn)問(wèn)題
在一次項(xiàng)目實(shí)踐中有實(shí)現(xiàn)多級(jí)緩存其中有已經(jīng)包括了 Shiro 的 Cache ,本以為開(kāi)啟 redis 的緩存是一件很簡(jiǎn)單的事情只需要在啟動(dòng)類上加上 @EnableCaching 注解就會(huì)啟動(dòng)緩存管理了,但是問(wèn)題出現(xiàn)了。
重要錯(cuò)誤日志截圖
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]
錯(cuò)誤日志分析
看日志大概就發(fā)現(xiàn)一個(gè)非法狀態(tài)異常,我們繼續(xù)查看接下來(lái)的日志有一段非常的重要日志 Overriding bean of same name 翻譯過(guò)來(lái)的意思是幫你重寫了一個(gè)名字一樣的 Bean,我再看看日志里有提到 RedisCacheManager 與我自己實(shí)現(xiàn)的 cacheManager 到這里我已經(jīng)感覺(jué)到問(wèn)題所在了,以下圖一為 RedisCacheManager 部分實(shí)現(xiàn)代碼。圖二為我自己的 Shiro 的 cacheManager 實(shí)現(xiàn)方法。
解決問(wèn)題 有 Spring 基礎(chǔ)的大家都應(yīng)該還記得 Spring 不允許有相同的 Bean 出現(xiàn)?,F(xiàn)在問(wèn)題就在于 Redis 緩存管理器和 Shiro 的緩存管理器重名了,而這二者又是通過(guò) Spring 管理,所以 Spring 讀取這二者的時(shí)候,產(chǎn)生沖突了。解決問(wèn)題的方法很簡(jiǎn)單:在自己實(shí)現(xiàn) EhCacheManager 時(shí)把 @Bean 指定一個(gè)名字可以像這樣 @Bean(name ="ehCacheManager" ),還有其他辦法大家可以在想辦法實(shí)現(xiàn)一下嘿嘿。
結(jié)語(yǔ)
雖然我們都知道 Spring 的報(bào)錯(cuò)是非常多的,但是在 Spring 的報(bào)錯(cuò)日志中查找問(wèn)題所在是非常有用的,大部分的錯(cuò)誤,日志都會(huì)給你反饋。
如果本文對(duì)你哪怕有一丁點(diǎn)幫助,請(qǐng)幫忙點(diǎn)好看。你的好看是我堅(jiān)持寫作的動(dòng)力。
轉(zhuǎn)載于:https://juejin.im/post/5c8f15fd5188252d5d31d255
總結(jié)
以上是生活随笔為你收集整理的八年开发程序员浅析SpringBoot 之 Shiro 与 Redis 多级缓存问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 测试:脱离VS2010使用自动化测试时出
- 下一篇: vertex 3.0 与SpringBo