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. 解決方法
漫長的搜索過后,沒能在網上找到解決方案
最終將目光瞄向了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ù)
相關文章
如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解
這篇文章主要為大家介紹了如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
SpringBoot中基于JWT的單token授權和續(xù)期方案步驟詳解
在前后端分離架構中,用戶登錄后,后端生成JWT?Token返給前端存于LocalStorage,每次請求攜帶Token驗證身份,后端校驗其有效性,本文給大家介紹SpringBoot中基于JWT的單token授權和續(xù)期方案步驟詳解,感興趣的朋友一起看看吧2024-09-09
Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明
這篇文章主要介紹了Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Scheduled如何會在上次任務執(zhí)行完才會執(zhí)行下次任務
這篇文章主要介紹了Scheduled如何會在上次任務執(zhí)行完才會執(zhí)行下次任務問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
從零到掌握Spring Boot Validation 接口校驗的詳細過程
本文詳細介紹了SpringBoot的Validation接口校驗機制,包括其核心功能、常用注解、自定義校驗、以及實際應用場景,通過注解定義數(shù)據(jù)校驗規(guī)則,感興趣的朋友跟隨小編一起看看吧2025-02-02
Java實現(xiàn)冒泡排序算法及對其的簡單優(yōu)化示例
這篇文章主要介紹了Java實現(xiàn)冒泡排序算法及對其的簡單優(yōu)化示例,冒泡排序的最差時間復雜度為O(n^2),最優(yōu)時間復雜度為O(n),存在優(yōu)化的余地,需要的朋友可以參考下2016-05-05

