【问题标题】:How to read an environment variable in Kotlin?如何在 Kotlin 中读取环境变量?
【发布时间】:2017-11-03 08:48:52
【问题描述】:

我想从我的 Kotlin 应用程序中的环境变量中获取某个值,但我在 core libraries 文档中找不到有关读取环境变量的任何内容。

我希望它在kotlin.system 之下,但实际上并没有那么多。

【问题讨论】:

  • 您尝试过 System.getenv 吗?
  • 我没有。我想当搜索“我如何在 Kotlin 中做 X”没有找到我想要的答案时,搜索“我如何在 Java 中做 X”可能会产生可用的结果。
  • @Bjornicus 你说的很对。 JVM 上的 Kotlin 可以访问 Java 的所有 API。

标签: environment-variables kotlin


【解决方案1】:

你可以使用 kotlin 扩展 Konfig

Konfig - A Type Safe Configuration API for Kotlin

Konfig 为从多个来源(内置资源、系统属性、属性文件、环境变量、命令行参数等)收集的配置属性提供可扩展的类型安全 API。

例如:Key("http.port", intType)

【讨论】:

  • 是的,我们如何使用 envs 呢?没有文档?
  • @PedroD 示例中的键是从各种来源构建的,环境变量可能在发生冲突时具有优先权。
【解决方案2】:

您总是可以采用这种方法:

val envVar : String? = System.getenv("varname")

不过,公平地说,这感觉不是特别惯用,因为您使用的是 Java 的 System 类,而不是 Kotlin 的。

【讨论】:

  • “利用 Java 的 System 类”没有任何问题。 Kotlin 非常强调 Java 互操作性,当您以 JVM 为目标时,它应该使用 Java API。
【解决方案3】:

我最喜欢的单线是(@Adam Millerchip 评论后更新):

val myEnv = System.getenv("MY_ENV").takeUnless { it.isNullOrEmpty() } ?: "default_value"

旧的: val myEnv = if (System.getenv("MY_ENV").isNullOrEmpty()) "default_value" else System.getenv("MY_ENV")

【讨论】:

  • 使用 Elvis 操作符可以更短、更易读。
  • System.getenv("MY_ENV").takeUnless { it.isNullOrEmpty() } ?: "default_value"
【解决方案4】:

在kotlin中使用elvis操作符可以很容易的获取环境值(如果存在的话)或者默认值:

var envVar: String = System.getenv("varname") ?: "default_value"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 2020-09-18
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多