Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring重试和恢复_Java_Spring_Spring Retry - Fatal编程技术网

Java Spring重试和恢复

Java Spring重试和恢复,java,spring,spring-retry,Java,Spring,Spring Retry,是否可以从异常中恢复,然后使用Spring retry再次重试 在Java中,类似于 try{ doSomething(); // throws Exception }catch(Exception e){ recoverException(); doSomething(); // OK } @Component public class CustomRetryListener extends RetryListenerSupport { @Override

是否可以从异常中恢复,然后使用Spring retry再次重试

在Java中,类似于

try{
    doSomething(); // throws Exception
}catch(Exception e){
    recoverException();
    doSomething(); // OK
}
@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
    }

}
谢谢

最后

我创建了一个RetryListener并将其添加到我的RetryTemplate中。当抛出某个异常时,我使用OneError方法从RetryListener中恢复,然后RetryTemplate将自动重试

差不多

try{
    doSomething(); // throws Exception
}catch(Exception e){
    recoverException();
    doSomething(); // OK
}
@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
    }

}

现在,您可以在任何地方插入RetryTemplatebean,并使用execute()方法从错误中恢复。

一个更简单的替代方法,使用:

RetryPolicy RetryPolicy=new RetryPolicy();
Failsafe.with(retryPolicy).get(()->doSomething());

当然可以。这正是重试所做的。完成本教程@pvpkiran是RetryTemplate我在找什么?:)在本例中,我使用了带有RetryTemplate的“侦听器”。侦听器正在调用上面的“recoverException”,然后调用callback.doWithRetry。使用RetryTemplate的方法正确吗?我不确定您到底在寻找什么。在您的情况下使用“@Retryable”和“@Recover”应该很好(据我所知很少)@pvpkiran据我所知,只有在Retryable完成所有重试后才会调用Recover。我想“修复”我的方法引发的异常,然后再次调用此方法。这是,我想在重试的中间。工作时,我将使用我的代码更新此问题。