How to read environment variables in Scala

前端 未结 6 610
渐次进展
渐次进展 2020-12-12 13:23

In Java, reading environment variables is done with System.getenv().

Is there a way to do this in Scala?

相关标签:
6条回答
  • 2020-12-12 14:01

    Since Scala 2.9 you can use sys.env for the same effect:

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

    I think is nice to use the Scala API instead of Java. There are currently several project to compile Scala to other platforms than JVM (.NET, javascript, native, etc.) Reducing the dependencies on Java API, will make your code more portable.

    0 讨论(0)
  • 2020-12-12 14:02

    To print all environment variables, you can use

    System.getenv.forEach((name, value) => println(s"$name: $value"))
    
    0 讨论(0)
  • 2020-12-12 14:05

    Same way:

    scala> System.getenv("HOME")
    res0: java.lang.String = /Users/dhg
    
    0 讨论(0)
  • 2020-12-12 14:15

    Using directly a default with getOrElse over the sys.env Map (val myenv: Map[String, String] = sys.env):

    sys.env.getOrElse(envVariable, defaultValue)
    

    You get the content of the envVariable or, if it does not exist, the defaultValue.

    0 讨论(0)
  • 2020-12-12 14:15

    If Lightbend's configuration library is used (by default in Play2 and Akka) then you can use

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

    syntax to override foo if an environment variable VAR_NAME exist. More details in https://github.com/typesafehub/config#optional-system-or-env-variable-overrides

    0 讨论(0)
  • 2020-12-12 14:18

    There is an object:

    scala.util.Properties
    

    this has a collection of methods that can be used to get environment info, including

    scala.util.Properties.envOrElse("HOME", "/myhome" )
    
    0 讨论(0)
提交回复
热议问题