Java 如何在ubuntu上设置系统变量并在scala中检索

Java 如何在ubuntu上设置系统变量并在scala中检索,java,scala,ubuntu,apache-spark,Java,Scala,Ubuntu,Apache Spark,在Scala中,我使用ConfigFactory存储DB连接信息,我想放置两个DB连接信息,并使用系统变量将它们分开。一个用于测试服务器,另一个用于我的真实服务器 my.config real { MySQL { path = "jdbc:mysql:MY_DB_PATH" user = "root" password = "root" } } development { MySQL { path = "jdbc:mysql:MY_DB_PATH"

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

my.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")
但我不知道如何在Ubuntu的命令行上设置系统变量SCALA_ENV 有办法吗?还是我误解了它的工作方式


谢谢

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

您可以使用Java/Scala中的System.getPropertymy.env nullable或Scala中的sys.props.getmy.env选项[String]检索这些键

你可以找到这些钥匙的更多信息

我将把我以前的答案留在这里,因为它回答了实际的问题

关于如何检索它,我可以建议使用sys.env,这是一个映射[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")

它似乎可以使用export SCALA_ENV=real,然后是SCALA System.getenvSCALA_ENV,但在我的例子中,我用jar文件打包SCALA,并用spark submit packageName.jar运行它,但它在这里不起作用。很抱歉,我在尝试$SCALA_ENV=real spark submit myPackage.jar之前没有提到它,但仍然不起作用。当然,它不起作用,它只用于本地进程。我会加上这个,但请编辑你的问题,这是误导性的。你是用纱线还是Mesos?您需要驱动程序或执行器的环境变量吗?不,我只在本地运行spark,没有纱线或介观