Java 使用Spring RetryTemplate时获取当前回退值
所以我一直在试用Spring的重试模板。一切正常。但是,我希望能够提取或记录当前正在使用的退避时间。我查阅了所有的文件/到处都找遍了,但我找不到任何简单的方法来获取这些信息Java 使用Spring RetryTemplate时获取当前回退值,java,spring,spring-retry,retrytemplate,Java,Spring,Spring Retry,Retrytemplate,所以我一直在试用Spring的重试模板。一切正常。但是,我希望能够提取或记录当前正在使用的退避时间。我查阅了所有的文件/到处都找遍了,但我找不到任何简单的方法来获取这些信息 @Bean public RetryTemplate retryTemplate() { RetryTemplate retryTemplate = new RetryTemplate(); ExponentialBackOffPolicy exponentialBackOf
@Bean
public RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setMaxInterval(10000); // 10 secs
exponentialBackOffPolicy.setMultiplier(2); // double the backoff
retryTemplate.setBackOffPolicy(exponentialBackOffPolicy);
SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy();
retryPolicy.setMaxAttempts(2);
retryTemplate.setRetryPolicy(retryPolicy);
return retryTemplate;
}
我就这样用它
retryTemplate.execute(arg0 -> {
myService.templateRetryService();
return null;
});
只提供RetryConext,但它不包含我需要的内容
任何想法都欢迎。谢谢。您可以在
ExponentialBackOffPolicy
上设置自定义Sleeper
来记录时间
/**
* Public setter for the {@link Sleeper} strategy.
* @param sleeper the sleeper to set defaults to {@link ThreadWaitSleeper}.
*/
public void setSleeper(Sleeper sleeper) {
this.sleeper = sleeper;
}
默认轨枕如下所示:
@SuppressWarnings(“串行”)
公共类卧铺实现卧铺{
@凌驾
public void sleep(长退避期)抛出中断异常{
睡眠(退避期);
}
}
在您的情况下,如果要跟踪状态,则不应使用无状态回退策略
如固定回退策略
。也许像ExponentialBackOffPolicy
这样的东西会给你这种控制权。您可以将其子类化并将其分配给retryTemplate
,并在自定义类中记录内容。谢谢,我很抱歉,但FixedBackoff策略是一个复制/粘贴错误。我现在更正了这个问题以反映这一点。我使用的是指数打包策略。即使我是这个策略的子类,但是我看不到任何访问内部退避时间的方法。我将不得不维护和管理我自己的退避时间,这将首先抵消使用spring库的好处。谢谢