问题描述
我正在使用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
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)