2017-10-13 6 views
0

Je n'ai trouvé aucune information sur une possibilité d'action dont j'ai besoin. J'utilise l'annotation @Retryable avec la méthode @Recover handler. Smth comme ceci: méthodeSpring Retry @Recover paramètres de passage

@Retryable(value = {Exception.class}, maxAttempts = 5, backoff = @Backoff(delay = 10000)) 
    public void update(Integer id) 
    { 
     execute(id); 
    } 

    @Recover 
    public void recover(Exception ex) 
    { 
     logger.error("Error when updating object with id {}", id); 
    } 

Le problème est que je ne sais pas, comment passer mon paramètre « id » pour récupérer(). Des idées? Merci d'avance.

Répondre

2

Selon le Spring Retry documentation, juste aligner les paramètres entre les @Retryable et les @Recover méthodes:

Les arguments en faveur de la méthode de récupération peut éventuellement comprendre l'exception qui a été lancée, et aussi éventuellement les arguments passés à la méthode orginal retryable (ou une liste partielle d'entre eux aussi longtemps que aucun n'est omis). Exemple:

@Service 
class Service { 
    @Retryable(RemoteAccessException.class) 
    public void service(String str1, String str2) { 
     // ... do something 
    } 
    @Recover 
    public void recover(RemoteAccessException e, String str1, String str2) { 
     // ... error handling making use of original args if required 
    } 
} 

vous pouvez donc écrire:

@Retryable(value = {Exception.class}, maxAttempts = 5, backoff = @Backoff(delay = 10000)) 
public void update(Integer id) { 
    execute(id); 
} 

@Recover 
public void recover(Exception ex, Integer id){ 
    logger.error("Error when updating object with id {}", id); 
}