Я хотел бы узнать, можно ли пропустить кэширование по каким-либо внешним условиям, например. значение поля bean.Spring ehCache пропускает кеширование в соответствии со значением bean-компонента
У меня есть следующий метод кэширования:
@Cacheable(value = "MY_CACHE", keyGenerator = "myKeyGenerator")
public List<CloudEntity> getTestMetaRecords(final String someParam) {
...
return aRetrievedList;
}
То, что я хочу, чтобы пропустить значение кэширования, не связанное с методом кэширования. Я знаю, что есть параметр unless
внутри аннотации @Cacheable
, но мне не удалось заставить его работать. Я добавил следующее:
unless = "#myBean.getSomeValue().equals(${value.from.properties})"
Любая помощь очень ценится!
Update:
Хорошо, я обнаружил, что unless
и condition
параметры могут быть использованы как для условного кэширования, но они используют ограниченный набор метаданных в Spel: methodName, method, target
... И я был в состоянии сделать это только путем обращения к полю вызываемого объекта с помощью выражения root.target
.
Мой код результата заключается в следующем:
@Cacheable(value = "MY_CACHE", keyGenerator = "myKeyGenerator", condition = "#root.target.myBean.getSomeValue().equals(#root.target.valueFromProperties)")
Что мне не нравится в этом решении является то, что целевой класс с помощью метода кэширования должны быть изменены, чтобы включить мою зависимость myBean
.
Есть ли более гибкое решение для этого?
Можно ли оценить JSON, который возвращает в виде строки объекта, не используя, если? У меня есть следующее значение в JSON, {"status": "FAILED", "errorcode": "0001", "error": "..."}. Я хочу проверить как «if =» # result.status == FAILED ». Можно ли оценить это выражение? – nijogeorgep