如何解决在RestTemplate中使用错误处理程序时可以使用@Retry和@Recover吗?
我正在使用Rest Template调用rest API。为了处理异常,我使用了自定义的ErrorHandler。
我还使用了@Retry和@Recover。最初在URL中出现ConnectException时,应在第二个URL上进行调用。但是,经过3次尝试,即使我定义了恢复方法,也会抛出ExhaustedRetry“找不到恢复方法”异常。
是因为我正在使用ErroHandler而没有显式引发异常吗?
下面是我的代码的骨架-
@Component
public class TestCall {
@Autowired
private RestTemplate restTemplate;
private boolean flag = false;
@Retryable(value = {ConnectException.class},maxAttempts = 3,backoff = @Backoff(delay = 96,maxDelay = 158,random = true))
public void callAPI() {
restTemplate.setErrorHandler(new RestErrorHandler());
if (!flag) {
// calling first URL
flag = !flag;
restTemplate.exchange(url1,HttpMethod.POST,body,Response.class);
} else {
// retrying with 2nd url if 1st url fails with ConnectException
flag = !flag;
restTemplate.exchange(url2,Response.class);
}
}
@Recover
public void recover(ConnectException exception) {
System.out.println("In recover method");
}}
错误处理程序-
public class RestErrorHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
return false;
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
//logging the error here
}
}
重试3次后,如果第4组抛出异常,则不会调用恢复方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。