Easy-retry是一个Java任务重试框架。
项目主页:https://github.com/bournecui/easy-retry
也可以设置中断重试的策略,比如达到最大重试次数、达到最多等待时间等。
引入依赖
<dependency>
<groupId>com.github.bournecui</groupId>
<artifactId>easy-retry</artifactId>
<version>0.0.1</version>
</dependency>
使用EasyRetryBuilder构建EasyRetry实例,它是线程安全的,所以在你的程序里构建一个就可以了。
EasyRetry easyRetry = EasyRetryBuilder.newBuilder()
.maxAttempts(10)
.includeExceptions(IllegalStateException.class)
.build();
使用EasyCallable(有返回值)或者EasyRunnable(没有返回值)封装你的任务并用easyRetry运行它。
Integer res1 = easyRetry.call(new EasyCallable<Integer>() {
@Override
public Integer call() {
int aInt = (int) (Math.random() * 10);
if (aInt % 3 != 0) {
throw new IllegalStateException(aInt + " is not expected!");
}
return aInt;
}
});
对于有返回值的任务,你可以使用ResultPredicate判断返回值是不是你想要的,如果不是你想要的,它会进行重试。
Integer res2 = easyRetry.call(new EasyCallable<Integer>() {
@Override
public Integer call() {
return (int) (Math.random() * 10);
}
}, new ResultPredicate<Integer>() {
@Override
public boolean test(Integer result) {
return result % 3 != 0;
}
});
如果你使用兰姆达表达式并static import来导入com.github.bournecui.easyretry.EasyRetryBuilder.newBuilder,你的代码看起来会更简洁。
newBuilder()
.maxAttempts(10)
.includeExceptions(IllegalStateException.class)
.build()
.call(() -> (int) (Math.random() * 10), result -> result % 3 != 0);