Как читать переменные окружения в Scala

В Java чтение переменных среды выполняется с System.getenv(),

Есть ли способ сделать это в Scala?

7 ответов

Решение

Начиная с Scala 2.9 вы можете использовать sys.env для того же эффекта:

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

Я думаю, что хорошо использовать Scala API вместо Java. В настоящее время существует несколько проектов по компиляции Scala для других платформ, отличных от JVM (.NET, javascript, native и т. Д.). Сокращение зависимостей от Java API сделает ваш код более переносимым.

Есть объект:

scala.util.Properties

здесь есть набор методов, которые можно использовать для получения информации об окружающей среде, в том числе

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

Так же:

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

Использование непосредственно по умолчанию с getOrElse над sys.env Карта (val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Вы получаете содержание envVariable или, если он не существует, defaultValue,

Если используется библиотека конфигурации Lightbend (по умолчанию в Play2 и Akka), вы можете использовать

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

синтаксис для переопределения foo, если существует переменная окружения VAR_NAME. Более подробная информация в https://github.com/typesafehub/config

Вы можете использоватьsys.props.getOrElse("key", "default")для свойств системы Java.

        package scala

  object sys {

  /** A bidirectional, mutable Map representing the current system Properties.
   *
   *  @return   a SystemProperties.
   *  @see      [[scala.sys.SystemProperties]]
   */
  def props: SystemProperties = new SystemProperties

  /** An immutable Map representing the current system environment.
   *
   *  @return   a Map containing the system environment variables.
   */
  def env: immutable.Map[String, String] = immutable.Map(System.getenv().asScala.toSeq: _*)

Чтобы распечатать все переменные среды, вы можете использовать

System.getenv.forEach((name, value) => println(s"$name: $value"))
Другие вопросы по тегам