diff --git a/spring-context/src/main/java/org/springframework/resilience/retry/MethodRetrySpec.java b/spring-context/src/main/java/org/springframework/resilience/retry/MethodRetrySpec.java index 32bd62b73ee..d747f1f8504 100644 --- a/spring-context/src/main/java/org/springframework/resilience/retry/MethodRetrySpec.java +++ b/spring-context/src/main/java/org/springframework/resilience/retry/MethodRetrySpec.java @@ -64,8 +64,8 @@ public record MethodRetrySpec( MethodRetryPredicate combinedPredicate() { - return (method, throwable) -> new ExceptionTypeFilter(this.includes, this.excludes, true) - .match(throwable.getClass()) && + ExceptionTypeFilter exceptionFilter = new ExceptionTypeFilter(this.includes, this.excludes, true); + return (method, throwable) -> exceptionFilter.match(throwable.getClass()) && this.predicate.shouldRetry(method, throwable); } diff --git a/spring-core/src/main/java/org/springframework/core/retry/DefaultRetryPolicy.java b/spring-core/src/main/java/org/springframework/core/retry/DefaultRetryPolicy.java index 37d9b3ebbf5..ead33d292bf 100644 --- a/spring-core/src/main/java/org/springframework/core/retry/DefaultRetryPolicy.java +++ b/spring-core/src/main/java/org/springframework/core/retry/DefaultRetryPolicy.java @@ -38,6 +38,8 @@ class DefaultRetryPolicy implements RetryPolicy { private final Set> excludes; + private final ExceptionTypeFilter exceptionFilter; + private final @Nullable Predicate predicate; private final BackOff backOff; @@ -49,6 +51,7 @@ class DefaultRetryPolicy implements RetryPolicy { this.includes = includes; this.excludes = excludes; + this.exceptionFilter = new ExceptionTypeFilter(this.includes, this.excludes, true); this.predicate = predicate; this.backOff = backOff; } @@ -56,9 +59,7 @@ class DefaultRetryPolicy implements RetryPolicy { @Override public boolean shouldRetry(Throwable throwable) { - ExceptionTypeFilter exceptionTypeFilter = new ExceptionTypeFilter(this.includes, - this.excludes, true); - return exceptionTypeFilter.match(throwable.getClass()) && + return this.exceptionFilter.match(throwable.getClass()) && (this.predicate == null || this.predicate.test(throwable)); }