SpringBoot 配置文件如何转换 Duration 的?

2,297 阅读1分钟

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 nanoseconds
  • us for microseconds
  • ms for milliseconds
  • s for seconds
  • m for minutes
  • h for hours
  • d for days

比如:PT15M 相当于 15m,配置起来会比较简单,如果不加后缀,只写数字,则 Spring Boot 默认会将其转换为毫秒。

如果是自定义 properties 文件,也可以选择使用 @DurationUnit 注解进行标识默认单位,如:

	@DurationUnit(ChronoUnit.SECONDS)
	private Duration timeout = Duration.ofMinutes(30);

参考资料: