2017-10-13 55 views
0

我找不到任何有關我需要的操作可能性的信息。我正在使用@Retry處理方法使用@Retryable註釋。 Smth像這樣:Spring Retry @Recover傳遞參數

@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()方法。有任何想法嗎?提前致謝。

回答

2

按照Spring Retry documentation,只是對齊和@Recover方法@Retryable之間的參數:

的回收方法可以任選地包括在 異常拋出的參數,並且還可以任選地傳遞給自變量 原始重試方法(或其中的部分列表,只要 都省略)。例如:

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