Spring RetryTemplate return 用法
Spring RetryTemplate return usage
例如我有一个 Spring RetryTemplate 配置:
@Configuration
@EnableRetry
public class RetryTemplateConfig {
@Bean
public RetryTemplate retryTemplate() {
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(300000);
RetryTemplate template = new RetryTemplate();
template.setRetryPolicy(retryPolicy);
template.setBackOffPolicy(backOffPolicy);
return template;
}
}
如果捕获到异常,我想重新调用此方法:
@Scheduled(cron = "${schedule.cron.update}")
public void calculate() throws Exception {
log.info("Scheduled started");
try {
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
} catch (IOException | TemplateException e) {
log.error(e.toString());
}
log.info("Scheduled finished");
}
所以,我在服务 class 中的方法 work() 可以抛出异常:
public void send() throws IOException, TemplateException {
...
}
好像还可以,但我真的不明白下一段代码是什么意思:
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
为什么我可以returntrue
、null
、new Object()
等东西?它会影响什么以及将在何处使用?我应该 return?
RetryTemplate 执行 RetryCallback,它是通用的,可以 return 您定义的任何 return 类型。
如果您需要从成功执行中获取数据,您可以 return 在回调中获取它并稍后在流程中获取它
Returns:
the result of the successful operation.
Example 重试读取文件:
return template.execute(context -> {
FileUtils.copyURLToFile(new URL(path), copy);
return FileUtils.readFileToString(copy, Charset.defaultCharset());
例如我有一个 Spring RetryTemplate 配置:
@Configuration
@EnableRetry
public class RetryTemplateConfig {
@Bean
public RetryTemplate retryTemplate() {
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(5);
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(300000);
RetryTemplate template = new RetryTemplate();
template.setRetryPolicy(retryPolicy);
template.setBackOffPolicy(backOffPolicy);
return template;
}
}
如果捕获到异常,我想重新调用此方法:
@Scheduled(cron = "${schedule.cron.update}")
public void calculate() throws Exception {
log.info("Scheduled started");
try {
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
} catch (IOException | TemplateException e) {
log.error(e.toString());
}
log.info("Scheduled finished");
}
所以,我在服务 class 中的方法 work() 可以抛出异常:
public void send() throws IOException, TemplateException {
...
}
好像还可以,但我真的不明白下一段代码是什么意思:
retryTemplate.execute(retryContext -> {
myService.work();
return true;
});
为什么我可以returntrue
、null
、new Object()
等东西?它会影响什么以及将在何处使用?我应该 return?
RetryTemplate 执行 RetryCallback,它是通用的,可以 return 您定义的任何 return 类型。
如果您需要从成功执行中获取数据,您可以 return 在回调中获取它并稍后在流程中获取它
Returns: the result of the successful operation.
Example 重试读取文件:
return template.execute(context -> { FileUtils.copyURLToFile(new URL(path), copy); return FileUtils.readFileToString(copy, Charset.defaultCharset());