最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法

 更新時間:2023年10月02日 08:16:55   作者:StoneWu - 石頭日記  
這篇文章主要介紹了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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

永泰县| 海阳市| 鄂伦春自治旗| 井冈山市| 中江县| 大足县| 鲁山县| 永胜县| 景德镇市| 萝北县| 马公市| 屯门区| 高邑县| 土默特右旗| 鹿泉市| 洪湖市| 延吉市| 日喀则市| 肥城市| 泰安市| 改则县| 绥化市| 东源县| 桐城市| 鄯善县| 渑池县| 平武县| 旬阳县| 沁水县| 沈阳市| 普陀区| 来安县| 晋江市| 罗田县| 永兴县| 治县。| 阳西县| 昌邑市| 尚志市| 广西| 鄂托克前旗|