7

根据第 9.2 节中的 spring 批处理/重试文档(http://docs.spring.io/spring-batch/reference/html/retry.html),可以通过 setRetryableExceptions 指定要重试或不重试的异常或使用 SimpleRetryPolicy 时的 setFatalExceptions。但是,这些方法未在 GitHub https://github.com/spring-projects/spring-retry/blob/master/src/main/java/org/springframework/retry/的当前版本(1.0.3)中定义重试策略.java

那么,这是文档错误吗?如果不是,那么方法在哪里?

从源代码来看,似乎只有可重试的异常可以通过带有异常映射的构造函数来设置。似乎没有办法定义致命异常。

4

3 回答 3

8

也许这会有所帮助。您必须创建一个按类类型保存所有可重试异常的映射,并将其添加到策略中。可能与致命例外相似。

Map<Class<? extends Throwable>, Boolean> r = new HashMap<>();
r.put(RetryException.class, true);
SimpleRetryPolicy p = new SimpleRetryPolicy(MAX_RETRIES, r);
RetryTemplate t = new RetryTemplate();
t.setRetryPolicy(p);
于 2014-04-17T13:21:52.500 回答
0

我还必须在我的项目中实现重试机制,并且我创建了自己的实现。

使用 AOP 重试

这就像一个魅力(只是我还没有找到一种方法来确保一次只实例化一个方面实例。)

您可以使用 @Retry 注释来注释您的方法,提供一些您想要的配置并完成。

于 2014-07-28T13:11:08.887 回答
0

这些方法不再可用。Gary 发布了一个问题来更正文档。您可以传递一个 Map 来提及您不想重试的一组致命异常。

  @Bean
  public RetryTemplate retryTemplate() {
      RetryTemplate template = retryTemplate();
      Map<Class<? extends Throwable>, Boolean> retryableExceptions = new HashMap<>();
      retryableExceptions.put(Exception.class, true);
      retryableExceptions.put(RuntimeException.class, false); 
      template.setRetryPolicy(new SimpleRetryPolicy(2,retryableExceptions));
      return template;
  }

在上面的示例中,模板将为Exception.classexceptRuntimeException.class及其子类的系列重试。此外,您可以参考 Gary在此处发布的答案以获得更好的理解。

于 2021-04-14T10:09:19.433 回答