Spring Boot中如何根据HTTP响应码进行重试
How do I perform retry based on HTTP response code in Springboot
@Retryable(value = ABCDException.class,
maxAttemptsExpression = 3,
backoff = @Backoff(delayExpression = "#{${application.delay}}"))
public String postABCDrequest(ABCDrequest abcdRequest) throws ABCDException {
try {
return restCalltopostData(abcdRequest);
} catch (AnyException e) {
log.error("Error Occured ", e);
throw new ABCDException("Error Occured ", e);
}
}
在这个方法中,只有当我得到某些响应代码时,我才需要重试发布数据。我搜索了一些不适合我的解决方案的选项。使用注解有没有更简单的方法?
在 catch 块中,您将无法获取响应代码。由于您对所有 5xx
感兴趣,请检查 response.getStatusCode().is5xxServerError()
并重新抛出异常 ABCDException.class
如果异常在服务器端得到妥善处理,并且 returns状态码。这样您的代码将继续重试所有 5xx
异常,直到 maxAttempts
耗尽。
否则,您可以通过替换 ABCDException.class
.
来重试 HttpServerErrorException.class
@Retryable(value = ABCDException.class,
maxAttemptsExpression = 3,
backoff = @Backoff(delayExpression = "#{${application.delay}}"))
public String postABCDrequest(ABCDrequest abcdRequest) throws ABCDException {
try {
return restCalltopostData(abcdRequest);
} catch (AnyException e) {
log.error("Error Occured ", e);
throw new ABCDException("Error Occured ", e);
}
}
在这个方法中,只有当我得到某些响应代码时,我才需要重试发布数据。我搜索了一些不适合我的解决方案的选项。使用注解有没有更简单的方法?
在 catch 块中,您将无法获取响应代码。由于您对所有 5xx
感兴趣,请检查 response.getStatusCode().is5xxServerError()
并重新抛出异常 ABCDException.class
如果异常在服务器端得到妥善处理,并且 returns状态码。这样您的代码将继续重试所有 5xx
异常,直到 maxAttempts
耗尽。
否则,您可以通过替换 ABCDException.class
.
HttpServerErrorException.class