Java 使用Spring RetryTemplate时获取当前回退值

Java 使用Spring RetryTemplate时获取当前回退值,java,spring,spring-retry,retrytemplate,Java,Spring,Spring Retry,Retrytemplate,所以我一直在试用Spring的重试模板。一切正常。但是,我希望能够提取或记录当前正在使用的退避时间。我查阅了所有的文件/到处都找遍了,但我找不到任何简单的方法来获取这些信息 @Bean public RetryTemplate retryTemplate() { RetryTemplate retryTemplate = new RetryTemplate(); ExponentialBackOffPolicy exponentialBackOf

所以我一直在试用Spring的重试模板。一切正常。但是,我希望能够提取或记录当前正在使用的退避时间。我查阅了所有的文件/到处都找遍了,但我找不到任何简单的方法来获取这些信息

    @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库的好处。谢谢