当前位置: 首页 > 知识库问答 >
问题:

如何告诉Spring cache不要在@Cacheable注释中缓存空值

李永寿
2023-03-14
@Cacheable(value="defaultCache", key="#pk")
public Person findPerson(int pk) {
   return getSession.getPerson(pk);
}

共有1个答案

赖翰
2023-03-14

万岁,从Spring3.2开始,框架就允许使用Spring SPEL和,除非。围绕Cacheable的java文档中的注意事项:

http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/cache/annotation/cacheable.html

公共抽象字符串除非

@Cacheable(value="defaultCache", key="#pk", unless="#result == null")
public Person findPerson(int pk) {
   return getSession.getPerson(pk);
}
 类似资料:
  • 我正在从下面的方法中获取电影列表,并带有@Cacheable注释。由于它没有任何参数,我将key设置为#root.method.name。 现在,我想添加一个新的电影,同样应该添加到上述缓存。 我试过这个,但它给了我例外。 我们可以在这里使用@CachePut注释,还是有其他方法?

  • 我正在使用Spring框架和hazelcast缓存在服务层缓存REST APi。我缓存的api有@Cacheable注释,带有cachename和keygenerator,工作很好。我正在寻找使用application属性或Consuler属性启用/禁用缓存的最佳方法。为此,我试图传递@cachable注释的condition属性中的属性,但没有成功。使用这种方法,我最终将在多个地方传递相同的值(

  • 我有一个用@Cacheable注释的方法。如果在方法内部捕获了异常,我希望清除缓存。但是,缓存似乎是在清除缓存的行之后执行的方面中加载的。因此,当在方法中捕获异常时,即使清除了缓存,空字符串结果仍保留在缓存中。 我应该从哪里清除缓存?

  • 我正在尝试对一个方法进行单元测试,根据在其中创建的对象的值,该方法有不同的分支。下面的代码演示了它。 下面是TestClass: 但是,它总是失败,因为c_objectMock始终为空。我该怎么做才能告诉Mockito不要返回空对象?

  • null 根据密钥在缓存中查找 如果找到,则从缓存返回结果 如果未找到,则返回NULL 我不想在cache-miss的情况下更新缓存,有没有办法使用spring注释来做到这一点

  • 我正在尝试创建具有多个参数值的缓存键。 在上面的场景中,我的名字是一个强制字段,而id是可选的。我想以这样一种方式创建键, 如果name=test且id=null,则缓存密钥必须cache_name_test 如果name=test且id=2,则缓存密钥必须cache_name_test_2 目前,如果未在参数值中传递id,则该键将形成类似“cache_name_test_null”的内容 是否可