Spring-@Recover-找不到恢复方法



我有一个Spring项目,在一个类中有Retryable和Recover方法。重试2次后,代码无法命中恢复方法块,错误为

Cannot locate recovery method; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8081/api/start": Connection refused; nested exception is java.net.ConnectException: Connection refused

Retryable方法附属于AOP。

代码可在Github Repo中获得:https://github.com/Nikhilgupta1891/RetryRecover

在repo中,以下是相关的类名:

  1. AOP:ApcAspect.java
  2. Scheduler(入口点(:ScheduledClass.java
  3. 服务类未运行Recover:ClassTwo.java#L37

附上ClassTwo的代码以供快速参考:

package com.abc.pbm.racassignmentpoll.services;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Recover;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Service
public class ClassTwo {
private final RestTemplate restTemplate = new RestTemplate();
private final String crimApiBaseUrl = "http://localhost:8081/api/";
@Retryable(maxAttemptsExpression = "2", backoff = @Backoff(delayExpression = "5000"))
public ResponseEntity startSecondMethod(String invEligDt, String runType) {
Map<String, Object> reqBody = new HashMap<>();
reqBody.put("INV_ELIG_DT", invEligDt);
reqBody.put("RUNTYPE", runType);
ResponseEntity responseEntity = restTemplate.postForEntity(crimApiBaseUrl + "start",
reqBody,
null,
Collections.EMPTY_MAP);
return responseEntity;
}
@Recover
public void recover(Exception error, String invEligDt, String runType){
// Some action.
log.info("INside recovery");
}
}

两个方法的返回类型以及Retryable和Recovery方法的输入参数应该相同。

相关内容

  • 没有找到相关文章

最新更新