【发布时间】:2017-02-14 16:26:46
【问题描述】:
我发现自己写了很多看起来像这样的重试循环
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 的函数,这很好,但它们似乎不允许限制特定的例外。
有什么建议吗?
【问题讨论】:
标签: java spring exception-handling