Каков наилучший способ определения ключа для аннотации @Cacheable для Spring

Если я определяю ehcache для метода, который не имеет параметров.

Но в моем случае я должен получить доступ к моему встроенному кешу через его ключ.

Поэтому, пожалуйста, предоставьте мне лучший способ присвоения ключа.

Следуйте мой код:

@Override
@Cacheable(value = "cacheName", key = "cacheKey")
public List<String> getCacheMethod() throws Exception{

PS Я получаю следующую ошибку, когда пытаюсь получить доступ к этому методу откуда-то еще.

org.springframework.expression.spel.SpelEvaluationException: EL1008E: (pos 0): не удается найти поле или свойство 'cacheKey' для объекта типа 'org.springframework.cache.interceptor.CacheExpressionRootObject'

3 ответа

Решение

Метод не имеет параметров, поэтому нет способа использовать параметр / аргумент в качестве ключа по умолчанию, и вы не можете использовать "статический текст" в качестве ключа, вы можете сделать следующее:

Объявите следующее

public static final String KEY = "cacheKey";
  • должно быть public
  • должно быть static а также final

затем

@Override
@Cacheable(value = "cacheName", key = "#root.target.KEY")
public List<String> getCacheMethod() throws Exception{

Готово

В простых случаях вы можете использовать более простой способ: @Cacheable(key = "#root.methodName")и ключ будет равен аннотированному имени метода

Вы можете решить эту проблему, используя одинарную кавычку в ключе, которая снова делает его String.

@Cacheable(value= CACHE_NAME.PRODUCT_CATLOG, key=" 'products' ")
    public List<Product> findAll() {
        return StreamSupport.stream(productRepository.findAll().spliterator(),false).collect(Collectors.toList());
    }

Пожалуйста, посмотрите на этот весенний документ.

ключ относится к аргументам вашего метода, у вас есть SpelEvaluationException так как cachekey не среди аргументов вашего метода.

Другие вопросы по тегам