业务需要在消费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 void retryTask(Runnable retryableTask) {
retryableTask.run();
} 


