spring-boot - Spring Boot 2 转换持续时间 java 8 application.properties

标签 spring-boot java-8 duration

我需要定义时长 值(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 秒的持续时间,则应将其定义为 PT5Spt5sPT5s

  • 字母的大小写无关紧要,因此您可以使用任何您可以阅读的组合
  • 通常每个人都使用全部大写字母

  • 其他示例
    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 ),因为它们代表准确的持续时间
  • 更高的 ChronoUnit ( DAYS , WEEKS , MONTHS , YEARS , DECADES , CENTURIES , MILLENNIA , ERAS , FOREVER ) 是不允许的,因为它们不能准确表示持续时间.这些 ChronoUnits 估计了持续时间,因为天数可能会因夏令时而变化,月份有不同的长度等。
  • 异常(exception) - Java 自动转换 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 or P30D. In case of P30D java's automatic conversion will take place and give us PT720H



    赞成,如果它对你有用或者你喜欢这个解释。谢谢,

    关于spring-boot - Spring Boot 2 转换持续时间 java 8 application.properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818137/

    相关文章:

    java-8 - Java 8 - 使用流在列表内循环映射

    php - 如何根据服务时间禁用时段?

    java - 简化在 .jar 所在文件夹中打开文件的过程

    java - 将国家/地区域功能转换为 Java8 Lambda

    json - json 响应 spring boot 中缺少字段

    java - 如何在运行时编辑 application.properties(供下次使用)

    java - android 从maps.google.com路线获取持续时间

    Perl:如何漂亮地打印时间差(持续时间)

    json - Spring 靴泽西 jackson

    Spring Boot - 无法连接到 SMTP 主机 : smtp. gmail.com,端口 : 25, 响应:421