Câu trả lời:
Kể từ Scala 2.9, bạn có thể sử dụng sys.env
cho cùng một hiệu ứng:
scala> sys.env("HOME")
res0: String = /home/paradigmatic
Tôi nghĩ thật tuyệt khi sử dụng API Scala thay vì Java. Hiện tại có một số dự án để biên dịch Scala sang các nền tảng khác ngoài JVM (.NET, javascript, bản địa, v.v.) Giảm các phụ thuộc vào API Java, sẽ giúp mã của bạn dễ di chuyển hơn.
sys.env
chỉ là một Map
. Bạn có thể bất cứ phương pháp nào phù hợp với bạn.
sys.env.getOrElse("VARIABLE", "default value")
cũng hữu ích trong trường hợp của tôi khi biến môi trường có thể không được xác định.
Có một đối tượng:
scala.util.Properties
cái này có một tập hợp các phương thức có thể được sử dụng để lấy thông tin môi trường, bao gồm
scala.util.Properties.envOrElse("HOME", "/myhome" )
Cùng một cách:
scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
Sử dụng trực tiếp một mặc định với getOrElse
trên sys.env
Bản đồ ( val myenv: Map[String, String] = sys.env
):
sys.env.getOrElse(envVariable, defaultValue)
Bạn có được nội dung của envVariable
hoặc, nếu nó không tồn tại , defaultValue
.
Nếu thư viện cấu hình của Lightbend được sử dụng (theo mặc định trong Play2 và Akka) thì bạn có thể sử dụng
foo = "default value"
foo = ${?VAR_NAME}
cú pháp ghi đè foo nếu tồn tại biến môi trường VAR_NAME. Thêm chi tiết trong https://github.com/typesafehub/config#optional-system-or-env-variable-overrides
Để in tất cả các biến môi trường, bạn có thể sử dụng
System.getenv.forEach((name, value) => println(s"$name: $value"))
error: missing parameter type
trên args nếu bạn chỉ sao chép-dán này.
(name: String, value: String)
, tôi nhận được error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
.
sys.env.get("VARIABLE")
cung cấp cho bạnOption[String]
thay vì đưa ra lỗi nếu thiếu biến đó.