2017-04-24 63 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()方法,從錯誤中恢復。