比如redis中lettuce中,刷新时间间隔的配置:
spring:
redis:
lettuce:
cluster:
refresh:
adaptive: true
period: 10s
其中period参数,我们看到在 RedisProperties中,是Duration类型,这个class没有有参构造方法, 起解析遵循spring-boot的转换器进行解析,如下:
配置解析按照spring-boot核心包org.springframework.boot.convert中的StringToDurationConverter按照约定的格式进行解析(其他相关解析转换器为 DurationToNumberConverter DurationToStringConverter NumberToDurationConverter)
格式约定定义在 DurationStyle中的 Unit 中,支持如下的后缀格式:
NANOS(ChronoUnit.NANOS, "ns", Duration::toNanos),
/**
* Microseconds.
*/
MICROS(ChronoUnit.MICROS, "us", (duration) -> duration.toMillis() * 1000L),
/**
* Milliseconds.
*/
MILLIS(ChronoUnit.MILLIS, "ms", Duration::toMillis),
/**
* Seconds.
*/
SECONDS(ChronoUnit.SECONDS, "s", Duration::getSeconds),
/**
* Minutes.
*/
MINUTES(ChronoUnit.MINUTES, "m", Duration::toMinutes),
/**
* Hours.
*/
HOURS(ChronoUnit.HOURS, "h", Duration::toHours),
/**
* Days.
*/
DAYS(ChronoUnit.DAYS, "d", Duration::toDays);
最后由转换器转换为 对应的Duration对象,而非直接调用Duration中的parse方法进行转换。