我发现自己在写很多看起来像的重试循环
int triesRemaining = 3;
while (triesRemaining > 0) {
try {
<MY FUNCTION CALL>
LOGGER.info("success");
break;
} catch (Exception e) {
if (e.getCause() instanceof SocketTimeoutException) {
triesRemaining--;
LOGGER.info(e.getMessage() + " trying again. Tries Remaining: " + triesRemaining);
} else {
LOGGER.error(e.getMessage(), e);
return;
}
}
}
if (triesRemaining == 0) {
LOGGER.error("Failed over too many times");
}
我想编写一个通用函数,该函数接受Lambda并仅在遇到特定错误时重试(在上述情况下为
SocketTimeoutException
)。我看过一些接受Runnable
的函数,但这很好,但是它们似乎不允许限制特定的异常。有什么建议吗?
最佳答案
看看org.springframework.retry
有一个@Retryable注释,它与您的需求相对应。您可以指定要重试的异常类型,并配置尝试次数等。