有没有一种方法可以指定如果该方法返回空值,则不要将结果缓存在 @Cacheable 注释中,以便像这样的方法?
@Cacheable(value="defaultCache", key="#pk")
public Person findPerson(int pk) {
return getSession.getPerson(pk);
}
更新:这是去年 11 月提交的关于缓存空值的 JIRA 问题,尚未解决: [#SPR-8871] @Cachable 条件应允许引用返回值 - Spring Projects Issue Tracker
原文由 David Zhao 发布,翻译遵循 CC BY-SA 4.0 许可协议
万岁,从 Spring 3.2 开始,框架允许使用 Spring SPEL 和
unless
。来自 Cacheable 周围的 java 文档的注释:http://static.springsource.org/spring/docs/3.2.x/javadoc-api/org/springframework/cache/annotation/Cacheable.html
重要的方面是
unless
在调用该方法后进行评估。这是非常合理的,因为如果密钥已经在缓存中,则该方法将永远不会执行。所以在上面的例子中,你可以简单地注释如下(#result 可用于测试方法的返回值):
我想这种情况是由于使用可插入缓存实现(例如允许缓存空值的 Ehcache)引起的。根据您的用例场景,这可能是可取的,也可能不是可取的。