web-dev-qa-db-ja.com

Spring Retry @ Recover受け渡しパラメーター

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

    @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」をrecover()メソッドに渡す方法がわからないことです。何か案は?前もって感謝します。

7
Sviatlana

Spring Retryのドキュメント によると、@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);
}
10
davidxxx