Spring缓存 - 错误时不要缓存

7

我正在使用Spring缓存,我的问题是:

如果结果出错,下一个请求可能会成功,那么我如何控制缓存?

例如:

@Cacheable("mycache")
public  ResponceBO getBigObject(String id) throws Exception {

    boolean isError = false;

    ***   load big object from other service,  can be loaded with errors  ***
    isError = true;

    if(error){
       responceBO.setError(true);
    }

    return responceBO;
}

如果出现错误,我不想缓存对象,那我该怎么做?


3
阅读文档,基本上使用 unless 和您想要的表达式即可。 - M. Deinum
谢谢,这非常有用! - prilia
1个回答

8
我建议阅读参考指南中的条件缓存部分。基本上,只需指定一个unless表达式即可防止缓存。(result占位符仅适用于unless语句而非condition语句。)
@Cacheable("mycache", unless="#result.error")
public  ResponceBO getBigObject(String id) throws Exception { ... }

应该能搞定。


能否像这样检查:@Cacheable("mycache", unless="#result!=null && #result.error")? - prilia
2
如果你想要一个或者不是一个,并且 unless=#result == null || #result.error 这样的话,你可以尝试使用 or 而不是 || - M. Deinum
@Deinum,我们能否将异常添加到unless条件中,以便任何异常/错误都不会被缓存? - Pradeep
1
异常并不会被缓存,因此这样做并没有任何意义。 - M. Deinum
如果它返回 rx.Single 或 rx.Observable 呢? - ses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接