如何在 Scala 中读取环境变量

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在 Scala 中读取环境变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量传递给 Jenkins 中的 sbt 测试构建步骤?

如何在 .NET 6 中读取环境变量?

如何在 Postman 测试中读取环境变量?

Scala:开发环境搭建变量判断循环函数集合

idea正确读取到环境变量

如何在vbs中设置可以在调用批处理脚本中读取的环境变量