选项 ^0.0.2
概述
Chance
提供选项配置用于控制调用时候的一些行为。选项Opt
是一个函数式接口,定义如下:
java
public interface Opt {
default boolean support(int opts) {
return (opts & value()) != 0;
}
int value();
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
实现Opt
接口只需要实现value()
方法,返回一个整型的值。目前约定最多可以存在32
个选项,其中值范围在[1 << 0, 1 << 15]
定义为Chance
内置的选项,值范围在[1 << 16, 1 << 31]
预留给使用者自定义扩展。当然,这里只是约定上的设计,没有做严格的判断或者限制,理论上可以使用任意的整型值作为选项的返回值。
使用详解
可以通过Chance.Builder
中的enableOpt(s)
和disableOpt(s)
启用或者禁用选项。可以通过系统变量CHANCE_OPTS
来定义全局的选项,使用系统变量变量的优先级会比在Chance.Builder
中定义高。例如:
java
// global options
System.setProperty("CHANCE_OPTS", String.valueOf(Opt.InternalOpt.getAllInternalOpts()));
Chance<String> chance = Chance.<String, Throwable>newBuilder().withNeverRetry().build();
// enableOpt or disableOpt
Chance<String> chance = Chance.<String, Throwable>newBuilder()
.enableOpts(Opt.InternalOpt.values())
.disableOpt(Opt.InternalOpt.RECORDING_SYSTEM_TIME)
.withNeverRetry()
.build();
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
内置选项
内置选项见枚举Opt.InternalOpt
,整理成表格如下:
选项 | 引入版本 | 功能描述 |
---|---|---|
RECORDING_SYSTEM_TIME | ^0.0.2 | 是否允许调用过程中通过System.nanoTime() 记录系统时间 |
FOREVER_CHOICE | ^0.0.2 | 是否允许使用ForeverChoice |
LISTENERS | ^0.0.2 | 是否允许使用监听器 |
CANCELLING_CHANCE | ^0.0.2 | 是否允许主动取消当前Chance 调用 |
EXCEPTION_TYPE_EQUALITY_COMPARISON | ^0.0.2 | 是否允许使用equals() 判断可重试异常类型,禁用此选项会使用isAssignableFrom() 进行判断 |
RECOVERY | ^0.0.2 | 是否允许恢复 |
WARNING
默认所有的内置选项都启用。如果RECORDING_SYSTEM_TIME
选项被禁用,那么MaxCallingTimeLimitChoice
也会同时被禁用。
自定义选项
实现自定义选项:
java
public class CustomOpt implements Opt {
@Override
public int value() {
return 1 << 16;
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
使用自定义选项:
java
Chance<String> chance = Chance.<String, Throwable>newBuilder()
.enableOpts(Opt.InternalOpt.values())
.enableOpt(new CustomOpt())
.withNeverRetry()
.build();
1
2
3
4
5
2
3
4
5