Как читать переменные окружения в 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"))