繁体   English   中英

Spring 重试和恢复

[英]Spring Retry and Recovery

是否可以从异常中恢复,然后使用 Spring Retry 重试?

在 Java 中,会是这样的

try{
    doSomething(); // throws Exception
}catch(Exception e){
    recoverException();
    doSomething(); // OK
}

谢谢!!

最后,

我创建了一个RetryListener并将其添加到我的RetryTemplate中。 当引发某些异常时,我从RetryListener的onError方法中恢复,然后RetryTemplate将自动重试。

就像是

@Component
public class CustomRetryListener  extends RetryListenerSupport {

    @Override
    public <T, E extends Throwable> void onError(RetryContext context, 
    RetryCallback<T, E> callback,
        Throwable throwable) {
        //recover from throwable
    }

}

和重试模板bean

@Bean
public RetryTemplate retryTemplate(CustomRetryListener listener) {
    RetryTemplate retryTemplate = new RetryTemplate();
    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
    retryPolicy.setMaxAttempts(2);
    retryTemplate.setRetryPolicy(retryPolicy);
    retryTemplate.registerListener(listener);
    return retryTemplate;
}

现在,您可以在任意位置注入retryTemplate bean,并使用execute()方法从错误中恢复。

使用Failsafe的更简单的选择:

RetryPolicy<Object> retryPolicy = new RetryPolicy<>().withMaxAttempts(2);

Failsafe.with(retryPolicy).get(() -> doSomething());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM