mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
commit
76bac0e6a4
@ -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 <T> 结果类型
|
||||
* @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 <T> 结果类型
|
||||
* @return 执行结果
|
||||
|
@ -124,6 +124,10 @@ public class RetryableTask<T> {
|
||||
* 重试间隔,默认1秒
|
||||
*/
|
||||
private Duration delay = Duration.ofSeconds(1);
|
||||
/**
|
||||
* 异常信息
|
||||
*/
|
||||
private Throwable throwable;
|
||||
|
||||
/**
|
||||
* 构造方法,内部使用,调用请使用请用ofXXX
|
||||
@ -174,6 +178,24 @@ public class RetryableTask<T> {
|
||||
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> throwable() {
|
||||
return Optional.ofNullable(this.throwable);
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步执行重试方法
|
||||
*
|
||||
@ -216,6 +238,7 @@ public class RetryableTask<T> {
|
||||
ThreadUtil.sleep(delay.toMillis());
|
||||
}
|
||||
|
||||
this.throwable = th;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user