java - 根据结果重试方法(而不是异常)
问题描述
我有一个具有以下签名的方法:
public Optional<String> doSomething() {
...
}
如果我得到一个空的Optional
,我想重试这个方法,并且只有在 3 次之后才返回空Optional
。
我查看并找到了Retryable
spring 注释,但它似乎只适用于异常。
如果可能的话,我想为此使用一个库,并避免:
- 创建并抛出异常。
- 自己写逻辑。
解决方案
我一直在重试中使用故障安全构建。您可以根据谓词和异常重试。
您的代码如下所示:
private Optional<String> doSomethingWithRetry() {
RetryPolicy<Optional> retryPolicy = new RetryPolicy<Optional>()
.withMaxAttempts(3)
.handleResultIf(result -> {
System.out.println("predicate");
return !result.isPresent();
});
return Failsafe
.with(retryPolicy)
.onSuccess(response -> System.out.println("ok"))
.onFailure(response -> System.out.println("no ok"))
.get(() -> doSomething());
}
private Optional<String> doSomething() {
return Optional.of("result");
}
如果可选项不为空,则输出为:
predicate
ok
否则看起来像:
predicate
predicate
predicate
no ok
推荐阅读
- python - 如何有条件地跳过 pytest 中夹具的实例化?
- c++ - sf::Event 类未定义,但 SFML 应该已定义它
- sql - any 和 all 运算符的独特用例是什么?
- java - 如何在不使用 java.util.Arrays 的情况下编写移动字符串数组成员的方法?
- python-3.x - 无法使用 Python 插件连接到 JIRA。“TypeError:预期的字符串或类似字节的对象”
- python - 如何使用 OpenCV 分割图像的灰色区域
- javascript - 嵌入消息 gif 不起作用 | 不和谐.js
- powershell - Powershell:如何获取当天登录一台计算机的所有用户?
- java - 无法使用自定义 Haar 级联分类器检测对象
- javascript - MongoDB 和 Node.js:检查电子邮件是否正在使用中