我有以下代码:
@Retryable(value = ObjectOptimisticLockingFailureException.class, maxAttempts = 10, backoff = @Backoff(delay = 50L))
public void foo(Request request, String status) {
request.setStatus();
// some additional logic
repository.save(request);
}
方法foo
是从许多地方调用的。然而,每次发生异常时,我都需要刷新DB中的request
。如何配置注释以刷新方法的参数?
为每次重试添加自定义逻辑的最佳方法是注册RetryTemplate
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(2000l);
retryTemplate.setBackOffPolicy(fixedBackOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
//add policy for wanted exception
return retryTemplate;
}
并使用这个
public void foo(Request request, String status) {
retryTemplate.execute(t -> {
request.setStatus();
// some additional logic
repository.save(request);
});
}
尝试像这样编写@Retryable注释
@Retryable(value = { RetryException.class }, maxAttempts = 4, label="retry API", backoff = @Backoff(delay = 5000))