Как создать несколько ключей кеша в @Cacheable, когда значение параметра равно нулю - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь создать ключ кэша с несколькими значениями параметров.

@Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id")
private JSONObject getData(String name, String id) throws Exception {

Из приведенного выше сценария I name является обязательным полем, а id - необязательным. Я хочу создать ключ таким образом, чтобы

  1. Если name = "test" и id = null, ключ кеша должен быть cache_name_test
  2. Если name = "test" и id = "2", ключ кэша должен быть cache_name_test_2

В настоящее время ключ формирует что-то вроде "cache_name_test_null", если идентификатор не передается в значении параметра

Возможно ли создать такой ключ с аннотацией @Cacheable?

1 Ответ

1 голос
/ 18 апреля 2020

Решение

Это выполнимо, но вам нужно обернуть 2 аннотации @Cachable в аннотацию @Caching.

@Caching(
      cacheable = {
            @Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id", condition = "#id != null"),
            @Cacheable(cacheNames = "cache_name_", key = "#name", condition = "#id == null")
      }
    )
public JSONObject getData(String name, String id) throws Exception {

Примечание о частных методах

Вы используете аннотация @Caching для частного метода. Это не работает Эти аннотации работают только на публичные c методы, вызываемые извне класса. См. Этот ответ переполнения стека: { ссылка }

...