Skip to content

Commit e6091f7

Browse files
authored
GH-340: Fix delayExpression w/ FixedBackOffPolicy
Resolves #340 Runtime evaluation of `delayExpression` with a `FixedBackOffPolicy` was not implemented causing the expression to be ignored.
1 parent cfa5550 commit e6091f7

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

src/main/java/org/springframework/retry/backoff/BackOffPolicyBuilder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,10 @@ public BackOffPolicy build() {
267267
return policy;
268268
}
269269
FixedBackOffPolicy policy = new FixedBackOffPolicy();
270-
if (this.delay != null) {
270+
if (this.delaySupplier != null) {
271+
policy.backOffPeriodSupplier(this.delaySupplier);
272+
}
273+
else if (this.delay != null) {
271274
policy.setBackOffPeriod(this.delay);
272275
}
273276
if (this.sleeper != null) {

src/test/java/org/springframework/retry/annotation/EnableRetryTests.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.springframework.retry.RetryContext;
3838
import org.springframework.retry.RetryListener;
3939
import org.springframework.retry.backoff.ExponentialBackOffPolicy;
40+
import org.springframework.retry.backoff.FixedBackOffPolicy;
4041
import org.springframework.retry.backoff.Sleeper;
4142
import org.springframework.retry.interceptor.RetryInterceptorBuilder;
4243
import org.springframework.retry.policy.SimpleRetryPolicy;
@@ -257,6 +258,11 @@ public void testExpression() throws Exception {
257258
assertThat(retryPolicy.getMaxAttempts()).isEqualTo(5);
258259
service.service4();
259260
assertThat(service.getCount()).isEqualTo(11);
261+
interceptor = delegates.get(target(service)).get(ExpressionService.class.getDeclaredMethod("service4"));
262+
template = (RetryTemplate) new DirectFieldAccessor(interceptor).getPropertyValue("retryOperations");
263+
templateAccessor = new DirectFieldAccessor(template);
264+
FixedBackOffPolicy fbp = (FixedBackOffPolicy) templateAccessor.getPropertyValue("backOffPolicy");
265+
assertThat(fbp.getBackOffPeriod()).isEqualTo(5000L);
260266
service.service5();
261267
assertThat(service.getCount()).isEqualTo(12);
262268
context.close();
@@ -762,7 +768,8 @@ public void service3() {
762768
}
763769
}
764770

765-
@Retryable(exceptionExpression = "message.contains('this can be retried')")
771+
@Retryable(exceptionExpression = "message.contains('this can be retried')",
772+
backoff = @Backoff(delayExpression = "5000"))
766773
public void service4() {
767774
if (this.count++ < 10) {
768775
throw new RuntimeException("this can be retried");

0 commit comments

Comments
 (0)