Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法
1. 背景
最近開發(fā)的項目中,需要大量的使用到緩存以提升性能
其中,有個活動controller,需要查詢所有的活動,代碼如下:
@GetMapping("/list")
public RestResult<List<ActivityInfoDTO>> list() {
List<ActivityInfoDTO> list = activityService.getAllActivity();
return addRestResult(list);
}對應(yīng)的ActivityService方法如下:
@Override
@Cacheable(value = "ActivityInfoDTO", key = "'getAllActivity'")
public List<ActivityInfoDTO> getAllActivity() {
List<ActivityInfoDTO> allActivity = activityDefMapper.getAllActivity();
return allActivity;
}結(jié)構(gòu)十分簡單,但是奇怪的是,ActivityService里的方法完全不會走緩存
而另一個service,BannerInfoService則可以正常緩存
調(diào)試時可以看到,正常的BannerInfoService是有被cglib代理的
而ActivityService是沒有被代理的
2. 解決方法
漫長的搜索過后,沒能在網(wǎng)上找到解決方案
最終將目光瞄向了ActivityService的其他引用,于是猜測是否是循環(huán)引用導(dǎo)致ActivityService沒有被代理
結(jié)果發(fā)現(xiàn),在另一個OpusService中,有引用該ActivityService
同時OpusService也引用了MessagePushService,而這個MessagePushService又引用了OpusService
于是選擇將OpusService中的ActivityService改為懶加載,加上@Lazy注解:
發(fā)現(xiàn)成功觸發(fā)了緩存機制,調(diào)試信息也可以看到被cglib代理
3. 總結(jié)
之前遇到的緩存不生效大多都是因為在類內(nèi)部通過this進行調(diào)用
這次遇到的情況確實不太常見,循環(huán)依賴會導(dǎo)致cglib無法成功代理被依賴的對象,導(dǎo)致緩存失效。
到此這篇關(guān)于Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法的文章就介紹到這了,更多相關(guān)Spring Cache @Cacheable 緩存在部分Service中失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot整合單機緩存ehcache的實現(xiàn)
- SpringBoot中整合Ehcache實現(xiàn)熱點數(shù)據(jù)緩存的詳細(xì)過程
- Spring中的@Cacheable緩存注解詳解
- SpringBoot?Cache?二級緩存的使用
- 詳解如何使用SpringBoot的緩存@Cacheable
- Spring中緩存注解@Cache的使用詳解
- SpringCache緩存處理詳解
- 詳解Springboot @Cacheable 注解(指定緩存位置)
- Springboot使用@Cacheable注解實現(xiàn)數(shù)據(jù)緩存
- SpringBoot使用Spring?Cache高效處理緩存數(shù)據(jù)
相關(guān)文章
如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解
這篇文章主要為大家介紹了如何實現(xiàn)nohup?java進程號一直在變方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解
在前后端分離架構(gòu)中,用戶登錄后,后端生成JWT?Token返給前端存于LocalStorage,每次請求攜帶Token驗證身份,后端校驗其有效性,本文給大家介紹SpringBoot中基于JWT的單token授權(quán)和續(xù)期方案步驟詳解,感興趣的朋友一起看看吧2024-09-09
Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明
這篇文章主要介紹了Springmvc項目web.xml中servlet-mapping路徑映射配置注意說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Scheduled如何會在上次任務(wù)執(zhí)行完才會執(zhí)行下次任務(wù)
這篇文章主要介紹了Scheduled如何會在上次任務(wù)執(zhí)行完才會執(zhí)行下次任務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
從零到掌握Spring Boot Validation 接口校驗的詳細(xì)過程
本文詳細(xì)介紹了SpringBoot的Validation接口校驗機制,包括其核心功能、常用注解、自定義校驗、以及實際應(yīng)用場景,通過注解定義數(shù)據(jù)校驗規(guī)則,感興趣的朋友跟隨小編一起看看吧2025-02-02
Java實現(xiàn)冒泡排序算法及對其的簡單優(yōu)化示例
這篇文章主要介紹了Java實現(xiàn)冒泡排序算法及對其的簡單優(yōu)化示例,冒泡排序的最差時間復(fù)雜度為O(n^2),最優(yōu)時間復(fù)雜度為O(n),存在優(yōu)化的余地,需要的朋友可以參考下2016-05-05

