首页 > 解决方案 > 如何在 ubuntu 上设置系统变量并在 scala 中检索它

问题描述

在 Scala 中,我使用 ConfigFactory 来存储数据库连接信息,我想放置两个数据库连接信息并使用系统变量将它们分开。一个用于测试服务器,另一个用于我的真实服务器

我的.config

real {
  MySQL {
    path = "jdbc:mysql:MY_DB_PATH"
    user = "root"
    password = "root"
  }
}
development {
  MySQL {
    path = "jdbc:mysql:MY_DB_PATH"
    user = "root"
    password = "root"
  }
}

我在下面得到这样的连接信息

val env = if (System.getenv("SCALA_ENV") == null) "development" else System.getenv("SCALA_ENV")

但我不知道如何SCALA_ENV在 Ubuntu 的命令行上设置系统变量
有没有办法做到这一点?还是我误解了它的工作方式?

谢谢

标签: javascalaubuntuapache-spark

解决方案


因为,正如您在评论中提到的,您实际上需要通过 a spark-submit,所以我建议您改用 Java 属性。您可以像对任何 Java 程序一样通过设置--conf spark.driver.extraJavaOptions="my.env=real"选项来指定它们spark-submit。您可以通过设置在执行程序中使用相同的方法--conf spark.executor.extraJavaOptions

System.getProperty("my.env")您可以在 Java/Scala 中使用 (nullable) 或sys.props.get("my.env")在Scala 中使用 ( )检索这些键Option[String]

您可以在此处找到有关这些键的更多信息。

我会在这里留下我之前的答案,因为它回答了实际问题。


关于如何检索它,我可以建议使用sys.envMap[String, String]它允许您以更简洁和惯用的方式与环境变量进行交互:

val env = sys.env.get("SCALA_ENV").getOrElse("development")

关于在 Ubuntu(或任何其他类 Unix 系统)中从 CLI 设置环境变量,您可以在应用程序的启动脚本中非常简单地执行此操作:

#!/usr/bin/env sh

SCALA_ENV=real

java -jar your.jar -cp all:the:jars:you:need org.example.YourMain

否则,您可以在命令行本身上运行进程之前显式设置它:

export SCALA_ENV=real # will be set for the rest of the session

或者也可以在您的命令之前(以便仅为此设置):

$ SCALA_ENV=real java -jar your.jar -cp all:the:jars:you:need org.example.YourMain

$当然,您的提示在哪里。


您可能也有兴趣将环境变量设置为您在 SBT 中构建的一部分:

envVars in Test := Map("SCALA_ENV" -> "development")

推荐阅读