java - Spring重试和恢复

标签 java spring spring-retry

是否可以从异常中恢复,然后使用 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;
}

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

关于java - Spring重试和恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43585597/

相关文章:

java - 用@KafkaListener注释的方法不会传播遇到的异常。由于此原因无法调用我的重试配置

java - Spring RetryTemplate 返回用法

java - alertdialog - removeView 必须被调用

java - 如果可以通过任何其他方法访问对象,那么在同步块(synchronized block)中锁定对象有什么用呢?

java - Kafka序列化-反序列化问题

java - 自定义 DaoAuthenticationProvider 不检查密码

java - 使用重试模板执行自定义重试策略

java - 从Firefox复制并在Ubuntu中使用Java读取时,剪贴板内容困惑

java - 找到大量整数的平均值的最佳方法应该是什么?

spring - 如何处理AJAX请求中的 session 超时?