Java 如何使用重试模板捕获特定异常
我正在尝试呼叫多个服务,每个服务都依赖于以前的呼叫。 每次调用我都创建了自己的重试逻辑,但我最近才发现Spring重试模板,并希望使用它 因此,我创建了以下retryTemplate:Java 如何使用重试模板捕获特定异常,java,spring,resttemplate,retrytemplate,Java,Spring,Resttemplate,Retrytemplate,我正在尝试呼叫多个服务,每个服务都依赖于以前的呼叫。 每次调用我都创建了自己的重试逻辑,但我最近才发现Spring重试模板,并希望使用它 因此,我创建了以下retryTemplate: RetryTemplate retryTemplate = new RetryTemplate(); FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy(); fixedBackOffPolicy.setBackOffPerio
RetryTemplate retryTemplate = new RetryTemplate();
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(4000L);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
retryTemplate.setRetryPolicy(retryPolicy);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
this.retryTemplate = retryTemplate;
我正在使用retryTemplate调用这样的服务:
try
{
retryTemplate.execute(
(RetryCallback<Object, Throwable>) retryContext -> *Call serivce via restTemplate etc. Returns an object of XYZ*);
} catch (Throwable throwable)
{
throwable.printStackTrace();
}
试试看
{
retryTemplate.execute(
(RetryCallback)retryContext->*通过restTemplate等调用serivce。返回XYZ*的对象;
}捕捉(可抛可抛)
{
printStackTrace();
}
但是,当我们不断地用大量请求轰炸服务时,调用有时会抛出ResourceAccessException(当服务承受巨大压力时,这是正常的接收方式吗?),因此我想捕捉它。我可以这样做吗:
try
{
retryTemplate.execute(
(RetryCallback<Object, Throwable>) retryContext -> Optional.of(restClient.post(restTemplate, aauiUrlLeadUri, requestBody, LeadPersistResponse.class)));
} catch (ResourceAccessException exception)
{
exception.printStackTrace();
*perform logic to handle exception*
} catch (Throwable throwable)
{
throwable.printStackTrace();
}
试试看
{
retryTemplate.execute(
(RetryCallback)retryContext->Optional.of(restClient.post(restTemplate,aauiUrlLeadUri,requestBody,LeadPersistResponse.class));
}捕获(ResourceAccessException异常)
{
异常。printStackTrace();
*执行逻辑以处理异常*
}捕捉(可抛可抛)
{
printStackTrace();
}
或者我可以简单地将处理excpeiton的逻辑放在
catch(Throwable Throwable)
块中吗?您应该从stacktrace检查ResourceAccessException
的根本原因。例如,端点可能会告诉您对呼叫进行速率限制。查看堆栈跟踪,它是由以下原因引起的::java.net.SocketException:来自服务器的文件意外结束
。。我是否应该捕获该异常而不是ResourceAccessException?如果您愿意的话。异常处理是基本Java,如果使用Spring Boot,您应该知道这一点。您应该从stacktrace检查ResourceAccessException
的根本原因。例如,端点可能会告诉您对呼叫进行速率限制。查看堆栈跟踪,它是由以下原因引起的::java.net.SocketException:来自服务器的文件意外结束
。。我是否应该捕获该异常而不是ResourceAccessException?如果您愿意的话。异常处理是基本的Java,如果使用SpringBoot,您应该知道这一点。