2017-04-24 70 views
-2

是否有可能从异常中恢复,然后再次使用Spring重试重试?弹簧重试和恢复

在Java中,会像

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

谢谢!

+1

当然是。这正是重试的目的。阅读本教程。 http://www.baeldung.com/spring-retry – pvpkiran

+0

@pvpkiran RetryTemplate是我在找什么? :) – jpadilladev

+0

在这种情况下,我使用了一个带有RetryTemplate的'侦听器'。监听器正在调用上面的'recoverException',然后调用callback.doWithRetry。 RetryTemplate的正确方法是什么? – jpadilladev

回答

0

最后,

我创建了一个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 
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豆和使用execute()方法,从错误中恢复。