业务需要在消费MQ消息时提供重试机制,我准备采用Spring-retry来实现这个功能,并且希望在使用@Retryable能够进行自定义配置,但在使用@Value方式来注入配置属性时却得到了如下提示:
Attribute value must be constant
Spring-retry要求配置的参数必须为常量,即在运行前就确定的值
后经过查阅资料得知,在Spring-retry 1.2版本后提供了通过SPEL实现可配置的方式,代码参考如下:
@Retryable(maxAttemptsExpression = "${eci.mq.retryable.maxAttempts}",
backoff = @Backoff(
delayExpression = "${eci.mq.retryable.delay}",
maxDelayExpression = "${eci.mq.retryable.maxDelay}",
multiplierExpression = "${eci.mq.retryable.multiplier}"))
public <T> void retryTask(Runnable retryableTask) {
retryableTask.run();
}