由于我在 springboot2.0 的 application-dev.yml 中通过如下方式 设置了 session 失效时间 :
session:
timeout: 43200
启动时发生如下错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'server.servlet.session.timeout' to java.time.Duration:
Property: server.servlet.session.timeout
Value: 43200
Origin: class path resource [application-dev.yml]:9:16
Reason: failed to convert java.lang.String to @org.springframework.boot.convert.DurationUnit java.time.Duration
Action:
Update your application's configuration
这是一个格式转换错误。
我们先来了解一下 Duration 这个类:
Duration 对象表示两个 Instant 间的一段时间。它是 java 8 中引入的两个与日期相关的新类:Period 和 Duration,中的一个。
两者之间的差异为:
- Period 基于日期值,
- Duration 基于时间值。
另外还有一个 Instant 表示某一瞬间的时间值,时间戳,时刻。
Duration 表示持续时间,两个时刻之间的时间跨度。
|
|
输出结果为:
PT48H
PT2M
而 Spring Boot 2 并没有使用 Duration.ofSeconds(200)
这样的方式去解析我们的配置中值。
根据错误提示它应该使用的是
org.springframework.boot.convert.DurationUnit
这个类。
我们可以使用遵循 ISO-8601 持续时间标准格式的字符串,来表示一个持续时间。
ISO 8601 持续时间格式,示例:
P3Y6M4DT12H30M5S
其中
- P :是持续时间指示符,始终放在开头,是必要字符,不能省略
- 3Y6M4D :表示 三年,六个月,四天
- T :表示后面跟的是时间。如果存在时间则必须要有 T
- 12H30M5S : 十二小时,三十分钟和五秒
其他示例:
- PT48H : 一小时 (表示时间,P 和 T 都不能省略)
- P5D : 五天(可以省略 T)
最后更改我们的配置为:
|
|
参考: