使用guava重试框架以固定的时间间隔继续重试

时间:2017-02-02 00:33:42

标签: java guava

我在我的一个项目中使用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,那么它应该停止但它没有停止。知道我在做什么错了吗?

2 个答案:

答案 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时,重试将停止。