Как поймать конкретное исключение с помощью шаблона повтора
Я пытаюсь позвонить в несколько служб, каждая служба зависит от предыдущего вызова. Для каждого вызова я создал свою собственную логику повтора, но я только недавно обнаружил шаблон повтора Spring и хотел бы его использовать.
Итак, я создал следующий retryTemplate:
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();
}
Но вызов иногда вызывает исключение 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();
}
или я могу просто изложить свою логику в обработке excpeiton в
catch(Throwable throwable)
блок?