Use ExceptionTypeFilter to filter includes & excludes for retry policies

This commit reduces code duplication by reusing the logic already
available in ExceptionTypeFilter.

Closes gh-35109

Signed-off-by: Mengqi Xu <2663479778@qq.com>
This commit is contained in:
Mengqi Xu
2025-06-29 18:20:35 +08:00
committed by Sam Brannen
parent 132836f6ca
commit 489ebd2438
2 changed files with 10 additions and 42 deletions
@@ -20,6 +20,8 @@ import java.time.Duration;
import java.util.Collection;
import java.util.Collections;
import org.springframework.util.ExceptionTypeFilter;
/**
* A specification for retry attempts on a given method, combining common
* retry characteristics. This roughly matches the annotation attributes
@@ -62,28 +64,9 @@ public record MethodRetrySpec(
MethodRetryPredicate combinedPredicate() {
return (method, throwable) -> {
if (!this.excludes.isEmpty()) {
for (Class<? extends Throwable> exclude : this.excludes) {
if (exclude.isInstance(throwable)) {
return false;
}
}
}
if (!this.includes.isEmpty()) {
boolean included = false;
for (Class<? extends Throwable> include : this.includes) {
if (include.isInstance(throwable)) {
included = true;
break;
}
}
if (!included) {
return false;
}
}
return this.predicate.shouldRetry(method, throwable);
};
return (method, throwable) -> new ExceptionTypeFilter(this.includes, this.excludes, true)
.match(throwable.getClass()) &&
this.predicate.shouldRetry(method, throwable);
}
}