我有一个 Cacheable 方法,它返回一个包含来自多个源的数据的对象。 如果发生错误(例如:源不可用),它将返回检索到的任何部分数据。 但是,我不希望缓存此结果。我有一个布尔值来确定结果是包含完整数据还是部分数据。
如何在
unless
注释参数中引用此局部布尔变量?
下面是我的问题的一个示例,引用了 Spring 文档 - 缓存抽象...
中的 Book 代码片段// Do not cache book if it's missing pages
@Cacheable(cacheNames="book", unless="#root.target.isMissingPages") //this doesn't work
public Book findBook(String name) {
Book book = bookShelf.get(name);
Boolean isMissingPages = checkMissingPages(book);
if (isMissingPages) {
book.setTitle(book.title + " Missing Pages!");
}
return book;
}
我尝试在
unless
参数中使用 SpEL(我不完全理解),但没有任何反应。
unless
参数在调用该方法后进行评估,您可以在方法 result
上使用它,即在您的情况下,为了不缓存丢失页面的 Book,您的 unless
表达式应如下所示:
@Cacheable(cacheNames="book", unless="#result.isMissingPages")
public Book findBook(String name) {
...
}