是否可以配置@Retryable
?此方法(getCurrentRate)將被調用3次。首先是5分鐘,之後10分鐘,最後15分鐘。我該如何配置?如何在Spring-retry(Spring Boot)中配置延遲時間
@Retryable(maxAttempts=3,value=RuntimeException.class,backoff = @Backoff(delay = 1000))
例
public class RealExchangeRateCalculator implements ExchangeRateCalculator {
private static final double BASE_EXCHANGE_RATE = 1.09;
private int attempts = 0;
private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@Retryable(maxAttempts=3,value=RuntimeException.class,backoff = @Backoff(delay = 1000))
public Double getCurrentRate() {
System.out.println("Calculating - Attempt " + attempts + " at " + sdf.format(new Date()));
attempts++;
try {
HttpResponse<JsonNode> response = Unirest.get("http://rate-exchange.herokuapp.com/fetchRate")
.queryString("from", "EUR")
.queryString("to","USD")
.asJson();
switch (response.getStatus()) {
case 200:
return response.getBody().getObject().getDouble("Rate");
case 503:
throw new RuntimeException("Server Response: " + response.getStatus());
default:
throw new IllegalStateException("Server not ready");
}
} catch (UnirestException e) {
throw new RuntimeException(e);
}
}
@Recover
public Double recover(RuntimeException e){
System.out.println("Recovering - returning safe value");
return BASE_EXCHANGE_RATE;
}
}
延遲由退避註釋,退避= @Backoff加入(延遲= 300000,乘法器= 2),該值是在毫秒, 沒有明確的設置,默認值是1000ms的固定延遲 只有延遲()設置:退避是一個固定的延遲與該值 當設置delay()和maxDelay()時,退避均勻分佈在這兩個價值es 使用delay(),maxDelay()和multiplier(),退避指數增長到最大值 –