我需要定义时长 值(value) (spring.redis.timeout) 通过 application.properties。
我试图使用 中定义的一点Spring Boot 文档 :
Spring Boot 专门支持表达持续时间 .如果你暴露一个 java.time.Duration
属性,应用程序属性中的以下格式可用:
常规长表示(使用毫秒作为默认单位,除非已指定 @DurationUnit
)java.util.Duration
使用的标准 ISO-8601 格式
一种更易读的格式,其中值和单位是耦合的(例如 10s 表示 10 秒)
当我使用 spring.redis.timeout=3s Spring boot 应用程序抛出这个异常:
Cannot convert value of type 'java.lang.String' to required type 'java.time.Duration': no matching editors or conversion strategy found
在最后一个 Spring boot 2 版本中,为 application.properties 中的 Duration 属性设置正确值的最佳方法是什么?
最佳答案
任何类型为 duration 的属性都可以通过 .properties
注入(inject)。或 .yml
文件。
您需要做的就是使用正确的格式。
如果要注入(inject) 5 秒的持续时间,则应将其定义为 PT5S
或 pt5s
或 PT5s
其他示例
PT1.5S = 1.5 Seconds
PT60S = 60 Seconds
PT3M = 3 Minutes
PT2H = 2 Hours
P3DT5H40M30S = 3Days, 5Hours, 40 Minutes and 30 Seconds
您还可以使用 +ve 和 -ve 符号来表示正负时间段。PT-3H30M
= -3 小时,+30 分钟,基本上是 -2.5 小时 -PT3H30M
= -3 小时,-30 分钟,基本上是 -3.5 小时 -PT-3H+30M
= +3 小时,-30 分钟,基本上是 +2.5 小时注:
HOURS
中表示或更低的 ChronoUnit ( NANOS
, MICROS
, MILLIS
, SECONDS
, MINUTES
, HOURS
),因为它们代表准确的持续时间 DAYS
, WEEKS
, MONTHS
, YEARS
, DECADES
, CENTURIES
, MILLENNIA
, ERAS
, FOREVER
) 是不允许的,因为它们不能准确表示持续时间.这些 ChronoUnits 估计了持续时间,因为天数可能会因夏令时而变化,月份有不同的长度等。DAYS
进入 HOURS
, 但它不适用于任何其他更高的 ChronoUnit ( MONTHS
, YEARS
等)。 If we try to do a "P1D", java automatically converts it into "PT24H". So If we want to do duration of 1 MONTH, we will have to use
PT720H
orP30D
. In case ofP30D
java's automatic conversion will take place and give usPT720H
赞成,如果它对你有用或者你喜欢这个解释。谢谢,
关于spring-boot - Spring Boot 2 转换持续时间 java 8 application.properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818137/