java - 创建重试模板以重试连接超时和读取超时
问题描述
我在我的 spring boot 应用程序中集成了一个 rest 模板。其余模板成功建立连接和读取超时。我还集成了一个重试模板来重试这些连接和读取超时。我的重试模板的代码如下。我的代码有问题,无法弄清楚。任何见解都会非常有帮助。我在“回调”中遇到错误,它指出它无法自动装配并且没有找到任何 bean。对于“失败”,我得到一个无法解析的符号。
@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;
}
}
解决方案
@Bean
工厂方法只是一个 bean 定义;你不能像这样放置运行时代码
try {
return template.execute(callback);
} catch (Exception e) {
logger.error("Retry processing failed " + e.getMessage());
return RetryTemplate.FAILED;
}
那里。你必须return template;
。
由于您将 a 传递RetryCallback
到工厂方法中,因此您必须在@Bean
其他地方定义了该类型的 a 。
但是,回调是在运行时使用的,而不是在 bean 定义时使用的。
然后template.execute()
,您可以在应用程序的其他地方使用。
究竟是什么RetryTemplate.FAILED
——没有这样的常数。
推荐阅读
- automated-tests - 如何在发布管道视图中查看正在进行的测试的测试结果?
- css - WP Bakery 选项卡动画覆盖
- angular - 如何将数组对象推入另一个数组对象,打字稿
- node.js - Jasmine - 如何从规范覆盖范围中排除 node_modules
- python - 故障:在 EbxmlMessage 中指定的操作不存在
- r - 在 R 中创建“元数据”字段
- ionic-framework - 如何在使用 NavController 的 app.html 上使用 Ionic 3 组件?
- html - 为什么图像没有正确分离?
- android - 资源“attr/layout_anchorGravity”的重复值与配置“”
- android - 在 react native 中,accessibilityLabel 属性有什么作用?