欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年10月02日 08:16:55   作者:StoneWu - 石頭日記  
這篇文章主要介紹了Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法

1. 背景

最近開發(fā)的項(xiàng)目中,需要大量的使用到緩存以提升性能

其中,有個(gè)活動(dòng)controller,需要查詢所有的活動(dòng),代碼如下:

@GetMapping("/list")
public RestResult<List<ActivityInfoDTO>> list() {
    List<ActivityInfoDTO> list = activityService.getAllActivity();
    return addRestResult(list);
}

對(duì)應(yīng)的ActivityService方法如下:

@Override
@Cacheable(value = "ActivityInfoDTO", key = "'getAllActivity'")
public List<ActivityInfoDTO> getAllActivity() {
    List<ActivityInfoDTO> allActivity = activityDefMapper.getAllActivity();
    return allActivity;
}

結(jié)構(gòu)十分簡(jiǎn)單,但是奇怪的是,ActivityService里的方法完全不會(huì)走緩存

而另一個(gè)service,BannerInfoService則可以正常緩存

調(diào)試時(shí)可以看到,正常的BannerInfoService是有被cglib代理的

而ActivityService是沒有被代理的

2. 解決方法

漫長(zhǎng)的搜索過后,沒能在網(wǎng)上找到解決方案

最終將目光瞄向了ActivityService的其他引用,于是猜測(cè)是否是循環(huán)引用導(dǎo)致ActivityService沒有被代理

結(jié)果發(fā)現(xiàn),在另一個(gè)OpusService中,有引用該ActivityService

同時(shí)OpusService也引用了MessagePushService,而這個(gè)MessagePushService又引用了OpusService

于是選擇將OpusService中的ActivityService改為懶加載,加上@Lazy注解:

發(fā)現(xiàn)成功觸發(fā)了緩存機(jī)制,調(diào)試信息也可以看到被cglib代理

3. 總結(jié)

之前遇到的緩存不生效大多都是因?yàn)樵陬悆?nèi)部通過this進(jìn)行調(diào)用

這次遇到的情況確實(shí)不太常見,循環(huán)依賴會(huì)導(dǎo)致cglib無法成功代理被依賴的對(duì)象,導(dǎo)致緩存失效。

到此這篇關(guān)于Spring Cache @Cacheable 緩存在部分Service中不生效的解決辦法的文章就介紹到這了,更多相關(guān)Spring Cache @Cacheable 緩存在部分Service中失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章徹底理解SpringIOC、DI

    一篇文章徹底理解SpringIOC、DI

    這篇文章主要給大家介紹了關(guān)于對(duì)SpringIOC、DI的理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中關(guān)于 null 的幾種處理方式詳解

    Java中關(guān)于 null 的幾種處理方式詳解

    這篇文章主要介紹了Java中關(guān)于 null 的幾種處理方式,關(guān)于 null ,你應(yīng)該知道下面這幾件事情來有效的了解 null ,從而避免很多由 null 引起的錯(cuò)誤,具體細(xì)節(jié)跟隨小編一起學(xué)習(xí)下吧
    2021-10-10
  • SpringBoot初始化接口CommandLineRunner示例詳解

    SpringBoot初始化接口CommandLineRunner示例詳解

    這篇文章主要介紹了SpringBoot初始化接口CommandLineRunner,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java使用ant.jar解壓縮文件的示例代碼

    java使用ant.jar解壓縮文件的示例代碼

    這篇文章主要介紹了java使用ant.jar解壓縮文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java格式化數(shù)值成貨幣格式示例

    java格式化數(shù)值成貨幣格式示例

    這篇文章主要介紹了java格式化數(shù)值成貨幣格式示例,格式化一個(gè)數(shù)值,比如123456789.123,希望顯示成"$123,456,789.123",需要的朋友可以參考下
    2014-04-04
  • SpringBoot中使用SpringSecurity進(jìn)行權(quán)限控制的示例代碼

    SpringBoot中使用SpringSecurity進(jìn)行權(quán)限控制的示例代碼

    本文將詳細(xì)介紹如何在Spring Boot應(yīng)用程序中使用Spring Security進(jìn)行權(quán)限控制,我們將探討Spring Security的基本概念,以及如何使用Spring Security實(shí)現(xiàn)認(rèn)證和授權(quán),需要的朋友可以參考下
    2024-02-02
  • Java讀取.properties配置文件方法示例

    Java讀取.properties配置文件方法示例

    這篇文章主要介紹了Java讀取.properties配置文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法

    詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法

    這篇文章主要介紹了詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細(xì)過程

    Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細(xì)過程

    本文要講的是?Knife4j?3.0.3?整合SpringBoot?2.6.4,在SpringBoot?2.4以上的版本和之前的版本還是不一樣的,這個(gè)也容易導(dǎo)致一些問題,本文就這兩個(gè)版本的整合做一個(gè)實(shí)戰(zhàn)介紹
    2022-09-09
  • 深入淺析Mybatis的缺陷問題

    深入淺析Mybatis的缺陷問題

    Mybatis是業(yè)界非常流行的持久層框架,輕量級(jí)、易用,在金融IT領(lǐng)域完全是領(lǐng)軍地位,比Hibernate更受歡迎,優(yōu)勢(shì)非常多,也是非常值得我們學(xué)習(xí)的。這篇文章主要介紹了Mybatis的缺陷問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評(píng)論