我发现自己在写很多看起来像的重试循环

    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注释,它与您的需求相对应。您可以指定要重试的异常类型,并配置尝试次数等。

10-06 09:52