我想知道是否有可能通过一些外部条件来跳过缓存,例如bean字段值。
以下是我的缓存方法:
我希望的是只跳过与缓存方法无关的值。我知道在@Cacheable注释中有unless参数,但我没有成功使用它。我添加了以下内容:
任何帮助都非常感激!
更新:
好的,我已经发现
我的结果代码如下:
我不喜欢这种解决方案的原因是目标类与缓存方法必须更改以包含我的依赖项
以下是我的缓存方法:
@Cacheable(value = "MY_CACHE", keyGenerator = "myKeyGenerator")
public List<CloudEntity> getTestMetaRecords(final String someParam) {
...
return aRetrievedList;
}
我希望的是只跳过与缓存方法无关的值。我知道在@Cacheable注释中有unless参数,但我没有成功使用它。我添加了以下内容:
unless = "#myBean.getSomeValue().equals(${value.from.properties})"
任何帮助都非常感激!
更新:
好的,我已经发现
unless
和condition
参数可以用于条件缓存,但它们在 spel 中使用有限的元数据集:
methodName、method、target
......
而且我只能通过root.target
表达式引用被调用对象字段来实现它。我的结果代码如下:
@Cacheable(value = "MY_CACHE", keyGenerator = "myKeyGenerator", condition = "#root.target.myBean.getSomeValue().equals(#root.target.valueFromProperties)")
我不喜欢这种解决方案的原因是目标类与缓存方法必须更改以包含我的依赖项
myBean
。是否有更灵活的解决方案?