比如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方法进行转换。