spring 如何取消重试?

vwkv1x7d  于 2023-04-04  发布在  Spring
关注(0)|答案(1)|浏览(136)

使用Spring Retry,我在1个线程中进行了重试。
在某些情况下,我希望能够在达到配置的重试次数之前取消重试。
使用此库实现此目标的最佳方法是什么?
我尝试将传入execute的lambda封装起来,这样我就可以检查是否应该像这样取消重试:

public <V, E extends Throwable> V execute(ThrowingSupplier<V, E> action) throws E {

    return retryTemplate.execute(context -> {
        if (shouldCancel()) {
            //Do something to cancel the retry here
        } else {
            return action.get()
        }
    });

}

然而,我觉得我用这种方式 Package 重试模板是在反对框架,而不是在使用框架。

lnvxswe2

lnvxswe21#

只需致电:

context.setExhaustedOnly()

然而,似乎RetryTemplate本身不能被外部中断,所以如果你需要在它处于睡眠状态时中断,你必须在它正在等待的线程上调用Thread.interrupt()。如果使用线程池,这可能有点棘手...

相关问题