2017-02-02 2 views
0

J'utilise Gava retry dans l'un de mes projets. Je veux continuer à réessayer à intervalle fixe si ma méthode ne retourne pas vrai. Dès qu'il redevient vrai, il devrait être arrêté.Utilisation de gava retry framework pour continuer à réessayer à intervalle de temps fixe

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(); 
    } 
    } 

J'ai le code ci-dessus et il ne cesse de réessayer toutes les minutes. Maintenant si à l'exécution, je change la valeur de l'état à true, alors il devrait être arrêté mais il n'a pas été arrêté. Une idée de ce que je fais?

Répondre

0

Vous utilisez un mauvais prédicat. Votre prédicat renvoie toujours 'true' et ignorant tester votre résultat de réessayer. Fournissez un prédicat approprié:

Predicate<Boolean> predicate = new Predicate<Boolean>() { 
     @Override 
     public boolean apply(Boolean input) { 
      return !input; 
     } 
    }; 
RetryerBuilder.<Boolean>newBuilder().retryIfResult(predicate) 
+0

hmm Je me suis trompé alors comment mon code va-t-il ressembler à ce changement? –

+0

J'ai édité ma réponse s'il vous plaît vérifier. Selon les docs de méthode retryIfResult, il réessayera à chaque fois si le prédicat retourne vrai. – eg04lt3r

+0

Je veux réessayer si elle renvoie toujours false et une fois qu'elle est vraie, elle devrait s'arrêter. Comment ferais-je cela? –