2

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

如果被文本包围,值的替换/覆盖仍然会发生吗?

例如,我知道:

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

foo.baseURL如果 ENV varFOO_BASE_URL存在,将覆盖。

这里会发生什么?

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

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

4

1 回答 1

3

刚刚进行了快速测试,第二个值将替换第一个值,缺少中间部分。所以 ifFOO_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 变量在第二行中被视为空字符串。文档替换部分的相关引用:

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

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