在其余模板出现“ SocketTimeoutException”的情况下,我想使用Spring重试功能。
但是Spring Rest模板像下面这样抛出: org.springframework.web.client.ResourceAccessException:I / O错误:读取超时。嵌套异常是java.net.SocketTimeoutException:读取超时
我在“重试模板映射”中添加了SocketTimeoutException。 仅当我在“重试模板映射”中添加SocketTimeoutException或也需要添加ResourceAccessException时,Spring重试才有效。
答案 0 :(得分:1)
您需要使用设置了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);
}