import cn.hutool.core.util.RandomUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
/**
* 重试工具类
*
* @author jason
*/
@Slf4j
public class RetryUtil {
// 最大重试次数
private static final Integer retryNumMax = 5;
// 重试间隔时间 单位:秒
private static final Integer intervalTime = 30;
/**
* 开始执行
*
* @param callback 具体要做的事情
* @return 最终是否成功
*/
@SneakyThrows
public static boolean start(Supplier<Boolean> callback) {
// 当前重试次数
boolean isSuccess = false;
for (int retryNum = 1; retryNum <= retryNumMax; retryNum++) {
isSuccess = callback.get();
if (isSuccess) {
log.info("第" + retryNum + "次执行成功");
break;
}
log.info("第" + retryNum + "次执行失败");
TimeUnit.SECONDS.sleep(intervalTime);
}
return isSuccess;
}
/**
* 测试重试工具类
*/
public static void main(String[] args) {
boolean isSuccess = RetryUtil.start(RandomUtil::randomBoolean);
log.info("结果:{}", isSuccess ? "成功" : "失败");
}
}
【工具类】自定义 Java 重试工具类
于 2021-04-20 14:21:27 首次发布