From 68f8139206ffc8a54fcdc36b3fe410abdfbfe7b2 Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Mon, 8 Dec 2025 17:11:38 +0100 Subject: [PATCH] Polishing --- .../ReactiveRetryInterceptorTests.java | 21 ++++++++------ .../resilience/RetryInterceptorTests.java | 28 +++++++++---------- .../core/retry/RetryTemplate.java | 8 +++--- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/spring-context/src/test/java/org/springframework/resilience/ReactiveRetryInterceptorTests.java b/spring-context/src/test/java/org/springframework/resilience/ReactiveRetryInterceptorTests.java index 06184fa8fb3..344eb373545 100644 --- a/spring-context/src/test/java/org/springframework/resilience/ReactiveRetryInterceptorTests.java +++ b/spring-context/src/test/java/org/springframework/resilience/ReactiveRetryInterceptorTests.java @@ -70,12 +70,7 @@ class ReactiveRetryInterceptorTests { @Test void withPostProcessorForMethod() { - DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); - bf.registerBeanDefinition("bean", new RootBeanDefinition(AnnotatedMethodBean.class)); - RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); - bpp.setBeanFactory(bf); - bf.addBeanPostProcessor(bpp); - AnnotatedMethodBean proxy = bf.getBean(AnnotatedMethodBean.class); + AnnotatedMethodBean proxy = getProxiedAnnotatedMethodBean(); AnnotatedMethodBean target = (AnnotatedMethodBean) AopProxyUtils.getSingletonTarget(proxy); assertThatIllegalStateException() @@ -329,13 +324,23 @@ class ReactiveRetryInterceptorTests { return ex -> assertThat(ex).matches(Exceptions::isRetryExhausted, "is RetryExhaustedException"); } + private static AnnotatedMethodBean getProxiedAnnotatedMethodBean() { + DefaultListableBeanFactory bf = createBeanFactoryFor(AnnotatedMethodBean.class); + return bf.getBean(AnnotatedMethodBean.class); + } + private static AnnotatedClassBean getProxiedAnnotatedClassBean() { + DefaultListableBeanFactory bf = createBeanFactoryFor(AnnotatedClassBean.class); + return bf.getBean(AnnotatedClassBean.class); + } + + private static DefaultListableBeanFactory createBeanFactoryFor(Class beanClass) { DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); - bf.registerBeanDefinition("bean", new RootBeanDefinition(AnnotatedClassBean.class)); + bf.registerBeanDefinition("bean", new RootBeanDefinition(beanClass)); RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); bpp.setBeanFactory(bf); bf.addBeanPostProcessor(bpp); - return bf.getBean(AnnotatedClassBean.class); + return bf; } diff --git a/spring-context/src/test/java/org/springframework/resilience/RetryInterceptorTests.java b/spring-context/src/test/java/org/springframework/resilience/RetryInterceptorTests.java index 2842a7c364f..e7b9c6956c0 100644 --- a/spring-context/src/test/java/org/springframework/resilience/RetryInterceptorTests.java +++ b/spring-context/src/test/java/org/springframework/resilience/RetryInterceptorTests.java @@ -99,11 +99,7 @@ class RetryInterceptorTests { @Test void withPostProcessorForMethod() { - DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); - bf.registerBeanDefinition("bean", new RootBeanDefinition(AnnotatedMethodBean.class)); - RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); - bpp.setBeanFactory(bf); - bf.addBeanPostProcessor(bpp); + DefaultListableBeanFactory bf = createBeanFactoryFor(AnnotatedMethodBean.class); AnnotatedMethodBean proxy = bf.getBean(AnnotatedMethodBean.class); AnnotatedMethodBean target = (AnnotatedMethodBean) AopProxyUtils.getSingletonTarget(proxy); @@ -113,11 +109,7 @@ class RetryInterceptorTests { @Test void withPostProcessorForMethodWithInterface() { - DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); - bf.registerBeanDefinition("bean", new RootBeanDefinition(AnnotatedMethodBeanWithInterface.class)); - RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); - bpp.setBeanFactory(bf); - bf.addBeanPostProcessor(bpp); + DefaultListableBeanFactory bf = createBeanFactoryFor(AnnotatedMethodBeanWithInterface.class); AnnotatedInterface proxy = bf.getBean(AnnotatedInterface.class); AnnotatedMethodBeanWithInterface target = (AnnotatedMethodBeanWithInterface) AopProxyUtils.getSingletonTarget(proxy); @@ -179,11 +171,7 @@ class RetryInterceptorTests { @Test void withPostProcessorForClass() { - DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); - bf.registerBeanDefinition("bean", new RootBeanDefinition(AnnotatedClassBean.class)); - RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); - bpp.setBeanFactory(bf); - bf.addBeanPostProcessor(bpp); + DefaultListableBeanFactory bf = createBeanFactoryFor(AnnotatedClassBean.class); AnnotatedClassBean proxy = bf.getBean(AnnotatedClassBean.class); AnnotatedClassBean target = (AnnotatedClassBean) AopProxyUtils.getSingletonTarget(proxy); @@ -324,6 +312,16 @@ class RetryInterceptorTests { } + private static DefaultListableBeanFactory createBeanFactoryFor(Class beanClass) { + DefaultListableBeanFactory bf = new DefaultListableBeanFactory(); + bf.registerBeanDefinition("bean", new RootBeanDefinition(beanClass)); + RetryAnnotationBeanPostProcessor bpp = new RetryAnnotationBeanPostProcessor(); + bpp.setBeanFactory(bf); + bf.addBeanPostProcessor(bpp); + return bf; + } + + static class NonAnnotatedBean implements PlainInterface { int counter = 0; diff --git a/spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java b/spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java index 0974419f81b..1870a7632e6 100644 --- a/spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java +++ b/spring-core/src/main/java/org/springframework/core/retry/RetryTemplate.java @@ -155,13 +155,13 @@ public class RetryTemplate implements RetryOperations { Throwable lastException = initialException; while (this.retryPolicy.shouldRetry(lastException)) { try { - long duration = backOffExecution.nextBackOff(); - if (duration == BackOffExecution.STOP) { + long sleepTime = backOffExecution.nextBackOff(); + if (sleepTime == BackOffExecution.STOP) { break; } logger.debug(() -> "Backing off for %dms after retryable operation '%s'" - .formatted(duration, retryableName)); - Thread.sleep(duration); + .formatted(sleepTime, retryableName)); + Thread.sleep(sleepTime); } catch (InterruptedException interruptedException) { Thread.currentThread().interrupt();