我在我的一个项目中使用Guava重试。如果我的方法没有返回true,我想继续以固定间隔重试。一旦它返回true,它就会停止。
public static void main(String[] args) {
Callable<Boolean> callable = new Callable<Boolean>() {
public Boolean call() throws Exception {
System.out.println("hello: " + new Date());
boolean status = false;
return status;
}
};
Retryer<Boolean> retryer =
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>alwaysTrue())
.withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.MINUTES))
.withStopStrategy(StopStrategies.neverStop()).build();
try {
boolean abc = retryer.call(callable);
System.out.println("world" + abc);
} catch (RetryException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
我有上面的代码,它每隔一分钟就会重试一次。现在,如果在运行时,我将状态值更改为true
,那么它应该停止但它没有停止。知道我在做什么错了吗?
答案 0 :(得分:0)
您使用的是错误的谓词。您的谓词始终返回“true”并忽略测试重试的结果。提供正确的谓词:
Predicate<Boolean> predicate = new Predicate<Boolean>() {
@Override
public boolean apply(Boolean input) {
return !input;
}
};
RetryerBuilder.<Boolean>newBuilder().retryIfResult(predicate)
答案 1 :(得分:0)
你可以在这里修改:
RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>.equalTo(true))
然后当结果变为false时,重试将停止。