【问题标题】:How to read environment variables in Scala如何在 Scala 中读取环境变量
【发布时间】:2012-04-17 08:16:37
【问题描述】:

在 Java 中,读取环境变量是通过 System.getenv() 完成的。

有没有办法在 Scala 中做到这一点?

【问题讨论】:

    标签: scala environment-variables


    【解决方案1】:

    同样的方式:

    scala> System.getenv("HOME")
    res0: java.lang.String = /Users/dhg
    

    【讨论】:

    • 现在我每天都在使用 Scala,我必须将接受的答案移至 @paradigmatic 的答案。它使用 Scala API,如果按照 cmets 中的建议使用,可以返回一个选项。
    【解决方案2】:

    从 Scala 2.9 开始,您可以使用 sys.env 获得相同的效果:

    scala> sys.env("HOME")
    res0: String = /home/paradigmatic
    

    我认为使用 Scala API 代替 Java 会很好。目前有几个项目可以将 Scala 编译到 JVM 以外的其他平台(.NET、javascript、native 等)。减少对 Java API 的依赖,将使您的代码更具可移植性。

    【讨论】:

    • 使用sys.env.get("VARIABLE") 可能是更好的做法,它会为您提供Option[String],而不是在缺少该变量时抛出错误。
    • @CristianVrabie 在大多数情况下,我也更喜欢它。但是sys.env 只是一个Map。您可以选择适合您的任何方法。
    • sys.env.getOrElse("VARIABLE", "default value") 在可能未定义环境变量的情况下也很有帮助。
    【解决方案3】:

    有一个对象:

    scala.util.Properties
    

    这有一组可用于获取环境信息的方法,包括

    scala.util.Properties.envOrElse("HOME", "/myhome" )
    

    【讨论】:

    • 我也更喜欢属性。它允许检索 Optionals,并具有常用属性的名称。
    【解决方案4】:

    如果使用 Lightbend 的配置库(默认在 Play2 和 Akka 中)那么你可以使用

    foo = "default value" foo = ${?VAR_NAME}

    如果存在环境变量 VAR_NAME,则覆盖 foo 的语法。 更多详情https://github.com/typesafehub/config#optional-system-or-env-variable-overrides

    【讨论】:

      【解决方案5】:

      要打印所有环境变量,可以使用

      System.getenv.forEach((name, value) => println(s"$name: $value"))
      

      【讨论】:

      • error: missing parameter type 在 args 上,如果你只是复制粘贴的话。
      • @thundergolfer:我目前没有在我的机器上安装 Scala。你弄清楚缺少什么了吗?
      • 将参数更改为(name: String, value: String)后,我得到error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
      • 以下是可行的,但需要导入:alvinalexander.com/scala/…
      【解决方案6】:

      sys.env 映射 (val myenv: Map[String, String] = sys.env) 上直接使用带有 getOrElse 的默认值:

      sys.env.getOrElse(envVariable, defaultValue)
      

      您将获得envVariable 的内容,如果不存在,则获得defaultValue

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-18
        • 2017-11-03
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        • 2017-10-21
        相关资源
        最近更新 更多