2017-10-13 7 views
0

私が必要とする行動の可能性についての情報が見つかりませんでした。 @Recoverハンドラメソッドで@Retryableアノテーションを使用しています。このようななめらか:Spring Retry @Recover passing parameters

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

は問題は()メソッドを回復するために、私のパラメータ「ID」を渡す方法を、私にはわからないということです。何か案は?前もって感謝します。

答えて

2

Spring Retry documentationによれば、単に@Retryable間パラメータと@Recover方法整列:

任意にスローされた例外 を含むことができ、回復方法の引数を、またに渡される引数を任意 オリジナルの再試行可能なメソッド(または、 が省略されている限り、その一部のリスト)。例:

@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 
    } 
} 

は、だから、書くことができます:

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