Spring Boot 的配置文件经常会出现 Duration 类型的配置项,比如设置 session 的超时时间。
Duration
我们知道 Duration 自己是根据正则进行日期处理的,具体规则如下:
Examples:
"PT20.345S" -- parses as "20.345 seconds"
"PT15M" -- parses as "15 minutes" (where a minute is 60 seconds)
"PT10H" -- parses as "10 hours" (where an hour is 3600 seconds)
"P2D" -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
"P2DT3H4M" -- parses as "2 days, 3 hours and 4 minutes"
"P-6H3M" -- parses as "-6 hours and +3 minutes"
"-P6H3M" -- parses as "-6 hours and -3 minutes"
"-P-6H+3M" -- parses as "+6 hours and -3 minutes"
复制代码
可见表示规则稍显复杂,容易出错,因此 SpringBoot 在解析 Duration 类型时进行了转换。
SpringBoot 对于 Duration 的转换
在 Spring Boot 中配置 Duration 类型,可以使用如下规则:
ns
for nanosecondsus
for microsecondsms
for millisecondss
for secondsm
for minutesh
for hoursd
for days
比如:PT15M 相当于 15m,配置起来会比较简单,如果不加后缀,只写数字,则 Spring Boot 默认会将其转换为毫秒。
如果是自定义 properties 文件,也可以选择使用 @DurationUnit 注解进行标识默认单位,如:
@DurationUnit(ChronoUnit.SECONDS)
private Duration timeout = Duration.ofMinutes(30);
复制代码
参考资料: