【问题标题】:How to override array in Typesafe config with environment variables?如何使用环境变量覆盖 Typesafe 配置中的数组?
【发布时间】:2017-05-24 06:39:29
【问题描述】:

我一直在 Typesafe 配置中使用environment variable substitution 功能:

foo = "foo"
foo = ${?FOO}

如果没有名为FOO 的环境变量,这将导致“foo”的“默认”值。在这种情况下,第二个值声明(foo = ${?FOO} 被简单地丢弃)。但是,如果存在名为FOO 的变量,则库将“替换”FOO 的值并将其分配给foo

我希望数组有类似的行为,但不幸的是,这不能按预期工作:

foo = [ "1", "2" ]
foo = [ ${?f1}, ${?f2} ]

如果没有定义f1f2,这只会导致foo 是一个空数组。我的目标是产生与上述类似的效果(如果没有定义环境变量 f1f2,则丢弃第二个 foo)。任何想法/建议表示赞赏。谢谢。

【问题讨论】:

  • 不理想,但如果您能够在应用程序代码中处理此问题,您是否可以将默认值附加到环境中的可选值,然后执行例如长度检查? foo = [ ${?f1}, ${?f2} ] foo += "1" foo += "2" 以上将为您提供环境中设置的任何内容,然后是两个默认值。您也可以从 foo 的空数组开始,并附加两个环境变量。

标签: typesafe typesafe-config


【解决方案1】:

我发现在 HOCON 配置文件中使用 a = ${?VARNAME} 和期望 List 的 Scala 代码,并使用 -DVARNAME.0=something(或简单地 VARNAME.0=something)将产生正确的 ["something"] 值。 (使用 Play 2.6.13 和 AllowedHosts 过滤器测试。)

【讨论】:

  • 如果数组值为 object 怎么办? -DVARNAME.0.fieldName=something 会工作,还是应该传递整个对象?
  • @可以,我相信这就是我为获得与工作类似的东西所做的事情。
猜你喜欢
  • 2016-10-06
  • 2019-12-02
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多