Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法
1. 背景
最近開發(fā)的項目中,需要大量的使用到緩存以提升性能
其中,有個活動controller,需要查詢所有的活動,代碼如下:
@GetMapping("/list") public RestResult<List<ActivityInfoDTO>> list() { List<ActivityInfoDTO> list = activityService.getAllActivity(); return addRestResult(list); }
對應的ActivityService方法如下:
@Override @Cacheable(value = "ActivityInfoDTO", key = "'getAllActivity'") public List<ActivityInfoDTO> getAllActivity() { List<ActivityInfoDTO> allActivity = activityDefMapper.getAllActivity(); return allActivity; }
結構十分簡單,但是奇怪的是,ActivityService里的方法完全不會走緩存
而另一個service,BannerInfoService則可以正常緩存
調試時可以看到,正常的BannerInfoService是有被cglib代理的
而ActivityService是沒有被代理的
2. 解決方法
漫長的搜索過后,沒能在網(wǎng)上找到解決方案
最終將目光瞄向了ActivityService的其他引用,于是猜測是否是循環(huán)引用導致ActivityService沒有被代理
結果發(fā)現(xiàn),在另一個OpusService中,有引用該ActivityService
同時OpusService也引用了MessagePushService,而這個MessagePushService又引用了OpusService
于是選擇將OpusService中的ActivityService改為懶加載,加上@Lazy注解:
發(fā)現(xiàn)成功觸發(fā)了緩存機制,調試信息也可以看到被cglib代理
3. 總結
之前遇到的緩存不生效大多都是因為在類內部通過this進行調用
這次遇到的情況確實不太常見,循環(huán)依賴會導致cglib無法成功代理被依賴的對象,導致緩存失效。
到此這篇關于Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法的文章就介紹到這了,更多相關Spring Cache @Cacheable 緩存在部分Service中失效內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- springboot整合單機緩存ehcache的實現(xiàn)
- SpringBoot中整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的詳細過程
- Spring中的@Cacheable緩存注解詳解
- SpringBoot?Cache?二級緩存的使用
- 詳解如何使用SpringBoot的緩存@Cacheable
- Spring中緩存注解@Cache的使用詳解
- SpringCache緩存處理詳解
- 詳解Springboot @Cacheable 注解(指定緩存位置)
- Springboot使用@Cacheable注解實現(xiàn)數(shù)據(jù)緩存
- SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù)
相關文章
SpringBoot初始化接口CommandLineRunner示例詳解
這篇文章主要介紹了SpringBoot初始化接口CommandLineRunner,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07SpringBoot中使用SpringSecurity進行權限控制的示例代碼
本文將詳細介紹如何在Spring Boot應用程序中使用Spring Security進行權限控制,我們將探討Spring Security的基本概念,以及如何使用Spring Security實現(xiàn)認證和授權,需要的朋友可以參考下2024-02-02詳解Java的內置異常以及創(chuàng)建自定義異常子類的方法
這篇文章主要介紹了詳解Java的內置異常以及創(chuàng)建自定義異常子類的方法,是Java入門學習中的基礎知識,需要的朋友可以參考下2015-09-09Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細過程
本文要講的是?Knife4j?3.0.3?整合SpringBoot?2.6.4,在SpringBoot?2.4以上的版本和之前的版本還是不一樣的,這個也容易導致一些問題,本文就這兩個版本的整合做一個實戰(zhàn)介紹2022-09-09