Как реализовать Spring Retry для SocketTimeoutException из шаблона отдыха - PullRequest
0 голосов
/ 07 мая 2019

Я хочу использовать функциональность Spring retry в случае 'SocketTimeoutException' из шаблона отдыха.

зато пружинный шаблон отдыха кидался как ниже: org.springframework.web.client.ResourceAccessException: ошибка ввода-вывода: истекло время ожидания; вложенное исключение - java.net.SocketTimeoutException: тайм-аут чтения

Я добавил исключение SocketTimeoutException в карту повторных попыток. Spring retry работает, только если я добавляю исключение SocketTimeoutException в карту шаблонов повторов или нужно также добавить ResourceAccessException.

1 Ответ

1 голос
/ 07 мая 2019

Вам необходимо использовать пользовательский SimpleRetryPolicy, для которого установлена ​​опция traverseCauses. Затем, вместо того, чтобы просто смотреть на исключение верхнего уровня, он изучит иерархию причин для поиска совпадения.

/**
 * Create a {@link SimpleRetryPolicy} with the specified number of retry
 * attempts. If traverseCauses is true, the exception causes will be traversed until
 * a match is found.
 *
 * @param maxAttempts the maximum number of attempts
 * @param retryableExceptions the map of exceptions that are retryable based on the
 * map value (true/false).
 * @param traverseCauses is this clause traversable
 */
public SimpleRetryPolicy(int maxAttempts, Map<Class<? extends Throwable>, Boolean> retryableExceptions,
        boolean traverseCauses) {
    this(maxAttempts, retryableExceptions, traverseCauses, false);
}
...