SpringCache常用注解及key中參數(shù)值為null問題解析
常用注解及參數(shù)
@Cacheable(參數(shù))
該注解一般加在讀方法上,將方法返回的數(shù)據(jù)加到緩存。
參數(shù):
參數(shù)名 | 說明 | 舉例 |
---|---|---|
value | 存到Redis中的key的前綴 | value="cache:test" |
key | 存到Redis中key的后半部分 | key="#p0 + ':' + #p1" |
unless | 不緩存的數(shù)據(jù) | unless="#result == null" |
condition | 要緩存的數(shù)據(jù),與unless相反 |
表中 #p0 為參數(shù),0表示第一個參數(shù),依次類推。也可以直接寫參數(shù)名。
表中 #result 為方法返回結(jié)果。
@CacheEvict(參數(shù))
該注解一般加在寫方法上,刪除緩存中對應(yīng)的key。
參數(shù):
參數(shù)名 | 說明 | 舉例 |
---|---|---|
value | 要刪除的key的前綴 | value="cache:test" |
key | 要刪除的key的后半部分 | key="#p0 + ':' + #p1" |
allEntries | 是否刪除value下的所有key | allEntries=true |
@Caching(參數(shù))
用于同時(shí)添加多個緩存注解,比如:
@Caching(evict={ @CacheEvict(...) @CacheEvict(...) ... })
key中的值為null的問題
我在接口的方法上加了@Cacheable注解,如下:
@Cacheable(value="cache:test", key="'id='+#id",unless="#result==null") String getNameById(Integer id);
然后Redis中的緩存key為:cache:test::id=null
究其原因,是因?yàn)閷?shí)現(xiàn)類的參數(shù)名不叫id。
key中參數(shù)的名字,必須與實(shí)現(xiàn)類中的參數(shù)名稱一致,才能取到值。
如果寫名字比較麻煩怕出錯,可以寫#p0,取第一個參數(shù),就跟名字脫離關(guān)系了。
另外,如果key中只有參數(shù),且這個參數(shù)又為null,那么就會報(bào)錯:
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.xxx.service.impl.XXXServiceImpl.singleValue(java.lang.String)] caches=[cache:test:singleValue] | key='#id' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='#result == null' | sync='false'
以上就是SpringCache常用注解及key中參數(shù)值為null的問題解析的詳細(xì)內(nèi)容,更多關(guān)于SpringCache key參數(shù)值null的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IntelliJ IDEA 設(shè)置數(shù)據(jù)庫連接全局共享的步驟
在日常的軟件開發(fā)工作中,我們經(jīng)常會遇到需要在多個項(xiàng)目之間共享同一個數(shù)據(jù)庫連接的情況,默認(rèn)情況下,IntelliJ IDEA 中的數(shù)據(jù)庫連接配置是針對每個項(xiàng)目單獨(dú)存儲的,幸運(yùn)的是,IntelliJ IDEA 提供了一種方法來將數(shù)據(jù)庫連接配置設(shè)置為全局共享,從而簡化這一過程2024-10-10SpringBoot?整合?Elasticsearch?實(shí)現(xiàn)海量級數(shù)據(jù)搜索功能
這篇文章主要介紹了SpringBoot?整合?Elasticsearch?實(shí)現(xiàn)海量級數(shù)據(jù)搜索,本文主要圍繞?SpringBoot?整合?ElasticSearch?接受數(shù)據(jù)的插入和搜索使用技巧,在實(shí)際的使用過程中,版本號尤其的重要,不同版本的?es,對應(yīng)的?api?是不一樣,需要的朋友可以參考下2022-07-07Java實(shí)現(xiàn)大文件的分割與合并的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)大文件的分割與合并,以及分割后又再次合并操作,文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08SpringCloud Zuul實(shí)現(xiàn)負(fù)載均衡和熔斷機(jī)制方式
這篇文章主要介紹了SpringCloud Zuul實(shí)現(xiàn)負(fù)載均衡和熔斷機(jī)制方式,具有很好的參考價(jià)值,希望對大家有所幫助。2021-07-07Maven+oracle+SSM搭建簡單項(xiàng)目的方法
本篇文章主要介紹了Maven+oracle+SSM搭建簡單項(xiàng)目的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03