как указать более одного параметра в методе для Spring Cacheable key

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key По ссылке выше показано, как указать ключ, когда все параметры для метод не требуется для ключа кэша, который используется по умолчанию. Но как указать более одного параметра (но не все в списке аргументов метода) в качестве ключа для кеша в аннотации Cacheable?


person shrewquest    schedule 02.03.2016    source источник


Ответы (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) {
 ...
}

Как видите, ключ представляет собой комбинацию и подмножество аргументов метода.

Буквально любое допустимое выражение SpEL, используемое для объединения аргументов метода @Cacheable для использования в качестве ключа, применимо.

Для сложных ключей, где доступны отдельные компоненты ключа (такие как Author, Edition, Title и т. д.), лучше всего создать собственный класс ключа (например, BookKey) и использовать собственный Spring KeyGenerator (например, BookKeyGenerator) для создания ключа Cache. Обратите внимание, что метод, целевой класс и аргументы метода @Cacheable (например, findBook(author, edition, title, ...)) доступны для вашего пользовательского KeyGenerator.

Надеюсь это поможет.

person John Blum    schedule 02.03.2016

0 параметр: ключ равен 0

1 параметр: ключ является параметром

2 или более параметра: ключ hashCode(param0, param1, ...)

person Laster Liang    schedule 18.12.2016