SpringCache常用注解及key中参数值为null问题解析

 更新时间:2023年09月04日 14:37:30   作者:晓晓先生  
这篇文章主要介绍了SpringCache常用注解及key中参数值为null的问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

常用注解及参数

@Cacheable(参数)

该注解一般加在读方法上,将方法返回的数据加到缓存。
参数:

参数名说明举例
value存到Redis中的key的前缀value="cache:test"
key存到Redis中key的后半部分key="#p0 + ':' + #p1"
unless不缓存的数据unless="#result == null"
condition要缓存的数据,与unless相反

表中 #p0 为参数,0表示第一个参数,依次类推。也可以直接写参数名。
表中 #result 为方法返回结果。

@CacheEvict(参数)

该注解一般加在写方法上,删除缓存中对应的key。
参数:

参数名说明举例
value要删除的key的前缀value="cache:test"
key要删除的key的后半部分key="#p0 + ':' + #p1"
allEntries是否删除value下的所有keyallEntries=true

@Caching(参数)

用于同时添加多个缓存注解,比如:

@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

究其原因,是因为实现类的参数名不叫id。

key中参数的名字,必须与实现类中的参数名称一致,才能取到值。

如果写名字比较麻烦怕出错,可以写#p0,取第一个参数,就跟名字脱离关系了。

另外,如果key中只有参数,且这个参数又为null,那么就会报错:

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中参数值为null的问题解析的详细内容,更多关于SpringCache key参数值null的资料请关注脚本之家其它相关文章!

相关文章

  • IntelliJ IDEA 设置数据库连接全局共享的步骤

    IntelliJ IDEA 设置数据库连接全局共享的步骤

    在日常的软件开发工作中,我们经常会遇到需要在多个项目之间共享同一个数据库连接的情况,默认情况下,IntelliJ IDEA 中的数据库连接配置是针对每个项目单独存储的,幸运的是,IntelliJ IDEA 提供了一种方法来将数据库连接配置设置为全局共享,从而简化这一过程
    2024-10-10
  • SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能

    SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能

    这篇文章主要介绍了SpringBoot 整合 Elasticsearch 实现海量级数据搜索,本文主要围绕 SpringBoot 整合 ElasticSearch 接受数据的插入和搜索使用技巧,在实际的使用过程中,版本号尤其的重要,不同版本的 es,对应的 api 是不一样,需要的朋友可以参考下
    2022-07-07
  • Java实现大文件的分割与合并的方法详解

    Java实现大文件的分割与合并的方法详解

    这篇文章主要为大家详细介绍了如何利用Java语言实现大文件的分割与合并,以及分割后又再次合并操作,文中示例代码讲解详细,感兴趣的可以了解一下
    2022-08-08
  • Java中Console对象实例代码

    Java中Console对象实例代码

    这篇文章主要介绍了Java中Console对象实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • java项目中classpath的理解

    java项目中classpath的理解

    这篇文章介绍了java项目中classpath的理解,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • java使用jdbc操作数据库示例分享

    java使用jdbc操作数据库示例分享

    这篇文章主要介绍了java使用jdbc操作数据库示例,需要的朋友可以参考下
    2014-03-03
  • SpringCloud Zuul实现负载均衡和熔断机制方式

    SpringCloud Zuul实现负载均衡和熔断机制方式

    这篇文章主要介绍了SpringCloud Zuul实现负载均衡和熔断机制方式,具有很好的参考价值,希望对大家有所帮助。
    2021-07-07
  • java哈夫曼树实例代码

    java哈夫曼树实例代码

    这篇文章主要为大家介绍了java哈夫曼树实例代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Maven+oracle+SSM搭建简单项目的方法

    Maven+oracle+SSM搭建简单项目的方法

    本篇文章主要介绍了Maven+oracle+SSM搭建简单项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Java 泛型详解与范例

    Java 泛型详解与范例

    hello !大家好!今天的主题就是:泛型。在使用集合类时,大家就已经接触到泛型了,那就是每个集合类后面的尖括号<>,这样一对尖括号,在java中就称为泛型。那么泛型这一个点,我们又该知道多少呢?我们往下看
    2021-11-11

最新评论