Каков наилучший способ определения ключа для аннотации @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
не среди аргументов вашего метода.