【问题标题】:Scala + Play, how to get a duration from the HOCON configuration?Scala + Play,如何从 HOCON 配置中获取持续时间?
【发布时间】:2023-03-11 00:34:01
【问题描述】:

假设我在application.conf 文件中定义了一个持续时间值。 documentation 说它可以解析持续时间,但我不知道如何。

timeout = 60 milliseconds

我可以直接将其解析为持续时间值吗?理想情况下,我想做这样的事情

val timeout = current.configuration.getMilliseconds("timeout")
(myActor ? GiveMeSomething)(timeout).mapTo[...]

但超时是Option[Long]。感谢您的任何提示。

【问题讨论】:

  • Typesafe 的Config 类读取HOCON 文件并提供getDuration(path: String): Duration 方法。我想你必须做所有的工作来找出读取配置文件的正确位置described in Play's docs

标签: scala playframework configuration hocon


【解决方案1】:

Play 的配置确实支持 Duration、FiniteDuration 和其他 Scala 类型。利用: configuration.get[FiniteDuration]("path.to.duration") Configuration.get 函数采用隐式 ConfigLoader[A]。 Play 附带一个lot of implementations,并且可以轻松添加额外的。

【讨论】:

    【解决方案2】:

    试试 getDuration(String, TimeUnit) 方法。

    val timeout = config.getDuration("timeout", TimeUnit.MILLISECONDS)
    

    【讨论】:

    • 我认为 Play Configuration 类中不存在该方法。它确实存在于 Typesafe Config 类中,但它返回一个 long。我认为问题是要获得Duration 返回类型。所以一个答案是在 Typesafe Config 类上使用 .getDuration(path: String): Duration 方法。
    【解决方案3】:

    试试这样的:

    import scala.concurrent.duration._
    config.getMilliseconds("timeout").map(_.milliseconds)
    

    这会给你一个Option[Duration];您可以通过 get/getOrElse 获取具体值。

    【讨论】:

      【解决方案4】:

      您可以像这样使用 Duration 应用方法:

      Duration.apply(configuration.get[String]("timeout"))
      

      然后在配置中你会得到这样的东西:

      timeout = 15 seconds
      

      【讨论】:

        【解决方案5】:

        我不相信您可以将其直接解析为持续时间值。

        我通常有一个帮手类/方法为我做这件事,类似于:http://pierreandrews.net/posts/config-scala.html

        【讨论】:

        • 原始 URL 不存在,用户被重定向到 clickbait 网站。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        相关资源
        最近更新 更多