From a4c358dca346781ba236a8551ca6403e2702f9fe Mon Sep 17 00:00:00 2001 From: Toint <599818663@qq.com> Date: Mon, 3 Mar 2025 17:28:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=87=8D=E8=AF=95=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=BC=82=E5=B8=B8=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/thread/RetryableTask.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java index 613f35831..f3f153290 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryableTask.java @@ -124,6 +124,10 @@ public class RetryableTask { * 重试间隔,默认1秒 */ private Duration delay = Duration.ofSeconds(1); + /** + * 异常信息 + */ + private Throwable throwable; /** * 构造方法,内部使用,调用请使用请用ofXXX @@ -174,6 +178,24 @@ public class RetryableTask { return Optional.ofNullable(this.result); } + /** + * 获取结果, 如果无法获取结果, 则抛出最后一次执行时的异常 + * + * @return 结果 + */ + public T orElseThrow() throws Throwable { + return Optional.ofNullable(this.result).orElseThrow(() -> this.throwable().orElse(new RuntimeException())); + } + + /** + * 获取异常 + * + * @return 返回包装了异常的 {@link Optional}对象 + */ + public Optional throwable() { + return Optional.ofNullable(this.throwable); + } + /** * 异步执行重试方法 * @@ -216,6 +238,7 @@ public class RetryableTask { ThreadUtil.sleep(delay.toMillis()); } + this.throwable = th; return this; } From 86a2733f98837cf0085d8ea09a39e3a751550065 Mon Sep 17 00:00:00 2001 From: Toint <599818663@qq.com> Date: Mon, 3 Mar 2025 17:31:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E6=B3=A8=E9=87=8A=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/hutool/core/thread/RetryUtil.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryUtil.java index 485b74575..60c9a2bc8 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/thread/RetryUtil.java @@ -39,7 +39,7 @@ public class RetryUtil { * @param run 执行方法 * @param maxAttempts 最大的重试次数 * @param delay 重试间隔 - * @param recover 达到最大重试次数后执行的备用方法,入参是重试过程中的异常 + * @param recover 达到最大重试次数后执行的备用方法 * @param exs 指定的异常类型需要重试 */ public static void ofException(final Runnable run, final long maxAttempts, final Duration delay, @@ -65,7 +65,7 @@ public class RetryUtil { * @param sup 执行方法 * @param maxAttempts 最大的重试次数 * @param delay 重试间隔 - * @param recover 达到最大重试次数后执行的备用方法,入参是重试过程中的异常 + * @param recover 达到最大重试次数后执行的备用方法 * @param exs 指定的异常类型需要重试 * @param 结果类型 * @return 执行结果 @@ -90,7 +90,7 @@ public class RetryUtil { * @param run 执行方法 * @param maxAttempts 最大的重试次数 * @param delay 重试间隔 - * @param recover 达到最大重试次数后执行的备用方法,入参是重试过程中的异常 + * @param recover 达到最大重试次数后执行的备用方法 * @param predicate 自定义重试条件 */ public static void ofPredicate(final Runnable run, final long maxAttempts, final Duration delay, @@ -111,7 +111,7 @@ public class RetryUtil { * @param sup 执行方法 * @param maxAttempts 最大的重试次数 * @param delay 重试间隔 - * @param recover 达到最大重试次数后执行的备用方法,入参是重试过程中的异常 + * @param recover 达到最大重试次数后执行的备用方法 * @param predicate 自定义重试条件 * @param 结果类型 * @return 执行结果