【问题标题】:HOCON conditional substitution with surrounding textHOCON 用周围文本进行条件替换
【发布时间】:2018-03-13 21:23:56
【问题描述】:

我目前无法自己测试此语法,因此问题是:

如果值被文本包围,是否仍会发生替换/覆盖?

例如,我知道:

foo.baseUrl = "http://foo:1234/" foo.baseUrl = ${?FOO_BASE_URL}

如果 ENV var FOO_BASE_URL 存在,将覆盖 foo.baseURL

这里发生了什么?

foo.baseUrl = "http://foo:1234/" foo.baseUrl = "http://${?FOO_BASE_URL}:1234/"

如果 ENV var 存在,是否仍会发生覆盖? 把它放在一个字符串中会否定这个吗?

【问题讨论】:

  • 我是 RTFM,谢谢,否则我不会问 :-) 有没有我错过的特定部分? @Leo

标签: java substitution playback hocon


【解决方案1】:

刚刚进行了快速测试,第二个值将替换第一个值,缺少中间部分。所以如果FOO_BASE_URL没有定义,而application.conf包含以下内容(注意第二行省略",双引号内不进行变量替换):

foo.baseUrl = "http://foo:1234/"
foo.baseUrl = http://${?FOO_BASE_URL}:1234/
foo.baseUrl = ${?FOO_BASE_URL}

foo.baseUrl 的值将是 http://:1234/。 not-found 变量在第二行中被视为空字符串。来自文档Substitution 部分的相关引用:

如果使用${?foo} 语法的替换未定义:

  • 如果它是对象字段的值,则不应创建该字段。如果该字段会覆盖之前为同一字段设置的值,则之前的值会保留。
  • 如果是数组元素,则不应添加该元素。
  • 如果它是与另一个字符串连接的值的一部分,那么它应该成为一个空字符串;如果与对象或数组连接的值的一部分,它应该成为一个空对象或数组。
  • 如果 bar 未定义,foo : ${?bar} 将避免创建字段 foo。如果 barbaz 都未定义,foo : ${?bar}${?baz} 也会避免创建字段。

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 2015-03-05
    • 1970-01-01
    • 2012-12-01
    • 2017-05-09
    • 1970-01-01
    • 2020-01-27
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多