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

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

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

一、背景介紹

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

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

@CacheEvict 是用來清除緩存的,有以下屬性:
value:緩存位置名稱,不能為空。
key:緩存的key,默認(rèn)為空。
condition:觸發(fā)條件,只有滿足條件的情況才會清除緩存,默認(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的方法放到一個java文件中寫,如果這兩個注解在兩個java文件的話,會導(dǎo)致@CacheEvict失效。
  • 4、返回值必須設(shè)置為void才會生效。網(wǎng)絡(luò)上有很多同學(xué)有返回值的使用@CacheEvict這個注解也是無效的。

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

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

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

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

三、解決方案

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

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

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

相關(guān)文章

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

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

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

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

    這篇文章主要介紹了淺談SpringMVC中Interceptor和Filter區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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ù)時出現(xiàn)java.sql.SQLSyntaxErrorException異常,本文就來介紹一下MyBatis異常的問題解決,具有一定的參考價值,感興趣的可以了解一下
    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)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java并發(fā)編程之進(jìn)程和線程調(diào)度基礎(chǔ)詳解

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

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

    詳解Java實現(xiàn)簡單SPI流程

    這篇文章主要介紹了Java實現(xià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 錯誤之找不到或無法加載主類的問題

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

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

最新評論