java - 如何在 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 的命令行上设置系统变量
有没有办法做到这一点?还是我误解了它的工作方式?
谢谢
解决方案
因为,正如您在评论中提到的,您实际上需要通过 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.env
,Map[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")
推荐阅读
- linux - fscrypt - 启动时在加密文件夹中运行脚本
- pvlib - 调整时区以计算 solarPosition
- javascript - 同时使用 onmouseover 和 onmouseout 来扩展容器
- php - 在 PHP 中组合和排列两个不同数组的项
- java - 如何制作 JPanel 的副本,它的所有 jcomponents 都具有与原始面板相同的功能?
- drake - 在pydrake中对物体施加外力
- python - 无法解析剩余部分:来自“i[0].title”的“[0].title”
- java - JDK14'启动在源文件中声明的类'如何指定编码
- actions-on-google - Google Smart Home App 不会在收到 Report State 请求后实时更新设备状态。这是预期的吗?
- xml - 具有 IXmlSerializable 和“正常”元素的类