当前位置: 首页 > 知识库问答 >
问题:

创建重试模板,在连接超时和读取超时重试

卢雅惠
2023-03-14
 @Bean
public RetryTemplate retryTemplate(RetryCallback<RetryTemplate, Exception> callback) {
    RetryTemplate template = new RetryTemplate();
    ExceptionClassifierRetryPolicy retryPolicy = new ExceptionClassifierRetryPolicy();
    Map<Class<? extends Throwable>, Boolean> retryableExceptions = new HashMap<Class<? extends Throwable>, Boolean>();
    retryableExceptions.put(SocketTimeoutException.class, Boolean.TRUE);
    retryableExceptions.put(ConnectionPoolTimeoutException.class, Boolean.TRUE);
    retryableExceptions.put(ResourceAccessException.class, Boolean.TRUE);

    NeverRetryPolicy doNotRetry = new NeverRetryPolicy();
    SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy(maxAttempts, retryableExceptions);
    simpleRetryPolicy.setMaxAttempts(maxAttempts);


    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
    backOffPolicy.setBackOffPeriod(backOffPeriod);

    template.setRetryPolicy(simpleRetryPolicy);
    template.setBackOffPolicy(backOffPolicy);

    try {
        return template.execute(callback);
    } catch (Exception e) {
        logger.error("Retry processing failed " + e.getMessage());
        return RetryTemplate.FAILED;
    }
}

共有1个答案

蓬新
2023-03-14

@bean工厂方法只是一个bean定义;不能像这样将运行时代码

try {
    return template.execute(callback);
} catch (Exception e) {
    logger.error("Retry processing failed " + e.getMessage());
    return RetryTemplate.FAILED;
}

在那里。必须返回模板;

由于要将RetryCallback传入工厂方法,因此必须在其他地方定义了这种类型的@bean

 类似资料:
  • 问题内容: 我有一个方法(如下),该方法可以下拉并以String形式返回网页的来源。一切正常且繁琐,但是当连接超时时,程序将引发异常并退出。有没有更好的方法可以执行此操作以允许它在超时时重试,或者有没有办法在此方法内执行此操作? 问题答案: 这是代码的重构,应重试下载时间。虽然尚未进行测试,但是它应该向正确的方向发展。

  • 因此,我使用来处理HTTP请求,它基本上使用的。 当设置了“读”超时,如果服务器连接已经建立,但服务器在应答之前等待/Hibernate/延迟响应“超时”时间(因此引发“读”异常而不是“连接”异常),则在引发该异常之前发送另一个(静默)请求,导致两个类似的请求,这是不可接受的。 我在寻找什么样的解决方案? 好吧,一个可以很好地解决这个问题/bug的解决方案,就像这里解释的修复一样(但我再次认为这在

  • 我刚刚升级到Android Studio 2.2.1版本,并且一个项目运行良好,现在我得到以下错误消息: 我知道还有另一个问题与此类似,但不是相同的情况。我不使用任何代理什么的。

  • 我的Spring Hibernate Web应用程序在MySQL上运行,这给我带来了麻烦。 我四处寻找并尝试了不同的配置,在这个网站上阅读了相当多的帖子,但它仍然会弹出微笑的头像。 错误消息是:由:com.mysql.jdbc.exceptions.jdbc4.通信异常:从服务器成功接收到的最后一个数据包是63,313,144毫秒前。最后一个成功发送到服务器的数据包是63,313,144毫秒前。比

  • 在我的生产Cassandra集群(10个节点)中,我经常获得。因此,为了在我的本地开发环境(四个节点的Cassandra集群)中重现这个问题,我运行了我的代码,然后停止了两个CassandRadaemon。我有以下例外 线程“main”com.datastax.driver.core.exceptions.unavailableException:在com.datastax.driver.core