如何在spring Cacheable键的方法中指定多个param

时间:2016-03-02 09:41:13

标签: spring caching spring-cache

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key 上面的链接显示了当默认缓存键不需要方法的所有参数时如何指定键。但是,如何指定多个参数(但不是方法arg列表中的所有参数)作为Cacheable注释中缓存的键?

2 个答案:

答案 0 :(得分:2)

如您所知,key注释的@Cacheable属性允许使用SpEL。在所有情况下,用于访问基础Cache的实际密钥必须“评估”为单个值。因此,您必须使用 SpEL 的强大功能来组合形成(唯一)键的@Cacheable方法参数。

举例来说,我们想要通过作者,版本和标题找到一本书。即,我们可能有@Cacheable方法签名,如此...

@Cacheable(cacheNames = "Books", key="#author.name + #edition + #title")
Book findBook(Author author, Integer edition, String title, boolean checkWarehous, boolean includeUsed) {
 ...
}

如您所见,密钥是方法参数的组合和子集。

字面上,用于组合@Cacheable方法参数以用作密钥的任何有效 SpEL 表达式都适用。

对于可以访问密钥的各个组件(例如作者,版本,标题等)的复杂密钥,最好创建自定义密钥类(例如BookKey)并使用自定义Spring KeyGenerator (例如BookKeyGenerator)生成Cache密钥。请注意,@Cacheable方法的方法,目标类和参数(例如findBook(author, edition, title, ...))均可供自定义KeyGenerator使用。

希望这有帮助。

答案 1 :(得分:0)

0 param:key为0

1 param:key是param

2个或更多参数:key是hashCode(param0,param1,...)