http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-annotations-cacheable-key По ссылке выше показано, как указать ключ, когда все параметры для метод не требуется для ключа кэша, который используется по умолчанию. Но как указать более одного параметра (но не все в списке аргументов метода) в качестве ключа для кеша в аннотации Cacheable?
как указать более одного параметра в методе для Spring Cacheable key
Ответы (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
.
Надеюсь это поможет.
0 параметр: ключ равен 0
1 параметр: ключ является параметром
2 или более параметра: ключ hashCode(param0, param1, ...)