Spring 使用局部变量进行条件缓存?

问题描述 投票:0回答:1

我有一个 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(我不完全理解),但没有任何反应。

spring-cache
1个回答
0
投票

unless
参数在调用该方法后进行评估,您可以在方法
result
上使用它,即在您的情况下,为了不缓存丢失页面的 Book,您的
unless
表达式应如下所示:

@Cacheable(cacheNames="book", unless="#result.isMissingPages")
public Book findBook(String name) {
...
}
© www.soinside.com 2019 - 2024. All rights reserved.