1. 概述
在本教程中,我们将介绍如何在 Scala 中读取环境变量(Environment Variables)。
环境变量 是操作系统层面定义的键值对配置项,应用程序可以从中读取运行时所需的配置信息。通常我们会用它来指定一些外部依赖的路径、数据库连接地址等配置项。
2. 如何读取环境变量
和大多数编程语言一样,Scala 提供了多种方式来读取系统环境变量。虽然方法不同,但使用起来大同小异,更多是风格上的选择问题。
2.1. 使用 Scala 的 sys
对象 ✅推荐
在 Scala 中,最常用且最符合语言风格的方式是通过 sys.env
来访问环境变量。它会将所有环境变量封装成一个不可变的 Map[String, String]
:
scala> sys.env
res0: scala.collection.immutable.Map[String,String] = HashMap(
JAVA_MAIN_CLASS_27606 -> scala.tools.nsc.MainGenericRunner,
PWD -> /private/tmp,
JAVA_ARCH -> x86_64
)
scala> sys.env.get("PWD")
res1: Option[String] = Some(/private/tmp)
这个方法本质上是对 Java 原生 API 的一层封装,但它更“Scala 化”——不会返回 null
,而是返回 Option
类型,避免了空指针的风险。
2.2. 使用 scala.util.Properties
工具类
还有一种不太常见的方法是使用 scala.util.Properties
对象提供的工具方法:
scala> scala.util.Properties.envOrElse("PWD", "undefined")
res0: String = /private/tmp
scala> scala.util.Properties.envOrElse("RANDOM-VAR-FOO", "undefined")
res1: String = undefined
scala> scala.util.Properties.envOrNone("PWD")
res2: Option[String] = Some(/private/tmp)
envOrElse(key, default)
:如果变量存在则返回其值,否则返回默认值。envOrNone(key)
:返回Option[String]
,变量不存在时为None
。
⚠️ 这种方式适合需要提供默认值或显式处理缺失情况的场景。
2.3. 使用 Java 的 System.getenv()
方法
由于 Scala 和 Java 具备良好的互操作性,我们也可以直接调用 Java 的 System.getenv()
来获取环境变量:
scala> System.getenv()
res0: java.util.Map[String,String] = {
JAVA_ARCH=x86_64,
JAVA_MAIN_CLASS_27606=scala.tools.nsc.MainGenericRunner,
PWD=/private/tmp
}
scala> System.getenv("PWD")
res1: String = /private/tmp
scala> System.getenv("RANDOM-VAR-FOO")
res2: String = null
⚠️ 注意:Java 的 getenv()
在找不到变量时会返回 null
,这在 Scala 中并不推荐使用,因为容易引发空指针异常。建议优先使用 sys.env
或 Properties
提供的方法。
3. 小结
本文介绍了在 Scala 中读取环境变量的几种常见方式:
方法 | 返回类型 | 是否安全 | 推荐程度 |
---|---|---|---|
sys.env |
Map[String, String] |
✅ 是 | ⭐⭐⭐⭐⭐ |
Properties.envOrElse |
String |
✅ 是 | ⭐⭐⭐ |
Properties.envOrNone |
Option[String] |
✅ 是 | ⭐⭐⭐ |
System.getenv() |
String / Map |
❌ 可能为 null | ⭐ |
✅ 简单粗暴总结一句:日常开发中优先使用 sys.env
,简洁又安全。
如果你在做配置加载、环境隔离相关的工作,这些知识点就是基本功了,踩坑往往都是因为没处理好 null
或默认值 😅。