я найти себе писать много циклов повторных попыток, которые выглядят какJava 8 родовое Retry, если определенное исключение
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
, что хорошо, но они, похоже, не ограничивают определенные исключения.
Любые советы?
Уважаемый О.П., для будущего это будет не хуже упоминать в тегах, которые вы используете 'рамки spring' – Andremoniy