亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring全家桶中@CacheEvict無效情況的問題解決

 更新時(shí)間:2025年10月27日 10:25:04   作者:No8g攻城獅  
本文主要介紹了SpringBoot中@CacheEvict注解刪除緩存無效的情況,主要包括Controller直接調(diào)用、key值不匹配、方法組織、返回值類型和代理機(jī)制,具有一定的參考價(jià)值,感興趣的可以了解一下

一、背景介紹

SpringBoot中使用@Cacheable注解緩存數(shù)據(jù),使用@CacheEvict注解刪除緩存。但是在項(xiàng)目使用過程中,發(fā)現(xiàn)使用@CacheEvict注解刪除緩存無效。

拓展:@CacheEvict 就是一個(gè)觸發(fā)器,在每次調(diào)用被它注解的方法時(shí),就會(huì)觸發(fā)刪除它指定的緩存的動(dòng)作。跟 @Cacheable 和 @CachePut 一樣,@CacheEvict 也要求指定一個(gè)或多個(gè)緩存,也指定自定義的緩存解析器和 key 生成器,也支持指定條件(condition 參數(shù))。

@CacheEvict 是用來清除緩存的,有以下屬性:
value:緩存位置名稱,不能為空。
key:緩存的key,默認(rèn)為空。
condition:觸發(fā)條件,只有滿足條件的情況才會(huì)清除緩存,默認(rèn)為空,支持SpEL。
allEntries:true表示清除value中的全部緩存,默認(rèn)為false。

二、原因分析

經(jīng)過網(wǎng)絡(luò)搜索與總結(jié),Spring全家桶中@CacheEvict無效的原因有以下幾種情況:

  • 1、使用@CacheEvict注解的方法必須是Controller層直接調(diào)用,Service里間接調(diào)用不生效。(我本次出現(xiàn)無效的原因)
  • 2、key值跟你查詢方法的key值不統(tǒng)一,所以導(dǎo)致緩存并沒有清除。
  • 3、把@CacheEvict的方法和@Cacheable的方法放到一個(gè)java文件中寫,如果這兩個(gè)注解在兩個(gè)java文件的話,會(huì)導(dǎo)致@CacheEvict失效。
  • 4、返回值必須設(shè)置為void才會(huì)生效。網(wǎng)絡(luò)上有很多同學(xué)有返回值的使用@CacheEvict這個(gè)注解也是無效的。

@CacheEvict annotation
It is important to note that void methods can be used with @CacheEvict

  • 5、@CacheEvict必須作用在走代理的方法上。同原因1。

在使用Spring @CacheEvict注解的時(shí)候,要注意,如果類A的方法function1()被標(biāo)注了 @CacheEvict注解,那么當(dāng)類A的其他方法,例如:function2(),去直接調(diào)用function1()的時(shí)候, @CacheEvict是不起作用的,原因是 @CacheEvict是基于Spring AOP代理類,function2()屬于內(nèi)部方法,直接調(diào)用function1()時(shí),是不走代理的。

@CacheEvict不生效的代碼示例如下:

三、解決方案

知道原因之后,就知道怎么解決了,由于以上有幾種原因,針對(duì)每種原因的解決方案不同,各自對(duì)應(yīng)解決即可。

以下為本文中出現(xiàn)問題的解決方案

到此這篇關(guān)于Spring全家桶中@CacheEvict無效情況的問題解決的文章就介紹到這了,更多相關(guān)Spring @CacheEvict無效情況內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于Spring總結(jié)(必看篇)

    關(guān)于Spring總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄P(guān)于Spring總結(jié)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 淺談SpringMVC中Interceptor和Filter區(qū)別

    淺談SpringMVC中Interceptor和Filter區(qū)別

    這篇文章主要介紹了淺談SpringMVC中Interceptor和Filter區(qū)別,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • MyBatis常用標(biāo)簽以及使用技巧總結(jié)

    MyBatis常用標(biāo)簽以及使用技巧總結(jié)

    在我們的學(xué)習(xí)過程中,我們經(jīng)常使用到mybatis,這篇文章主要給大家介紹了關(guān)于MyBatis常用標(biāo)簽以及使用技巧的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • MyBatis異常java.sql.SQLSyntaxErrorException的問題解決

    MyBatis異常java.sql.SQLSyntaxErrorException的問題解決

    使用mybatis插入數(shù)據(jù)時(shí)出現(xiàn)java.sql.SQLSyntaxErrorException異常,本文就來介紹一下MyBatis異常的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Default方法是在java8中引入的關(guān)鍵字,也可稱為Virtual extension methods—虛擬擴(kuò)展方法,這篇文章主要給大家介紹了關(guān)于Java8接口中引入default關(guān)鍵字的本質(zhì)原因,需要的朋友可以參考下
    2022-01-01
  • Java復(fù)制文件常用的三種方法

    Java復(fù)制文件常用的三種方法

    今天小編就為大家分享一篇關(guān)于Java復(fù)制文件常用的三種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ)詳解

    java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ)詳解

    這篇文章主要介紹了java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解Java實(shí)現(xiàn)簡(jiǎn)單SPI流程

    詳解Java實(shí)現(xiàn)簡(jiǎn)單SPI流程

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單SPI流程,SPI英文全稱為Service Provider Interface,顧名思義,服務(wù)提供者接口,它是jdk提供給“服務(wù)提供廠商”或者“插件開發(fā)者”使用的接口
    2023-03-03
  • Java7到Java17之Switch語句進(jìn)化史示例詳解

    Java7到Java17之Switch語句進(jìn)化史示例詳解

    這篇文章主要為大家介紹了Java7到Java17之Switch語句進(jìn)化史示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • IDEA 錯(cuò)誤之找不到或無法加載主類的問題

    IDEA 錯(cuò)誤之找不到或無法加載主類的問題

    這篇文章主要介紹了IDEA 錯(cuò)誤之找不到或無法加載主類,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論