Configuration 使用环境变量设置list类型的Play Framework配置变量

Configuration 使用环境变量设置list类型的Play Framework配置变量,configuration,environment-variables,playframework-2.3,Configuration,Environment Variables,Playframework 2.3,我试图做的是将list类型的配置变量设置为环境变量。 我知道我可以使用如下环境变量: variable = ${?ENV_VAR} 但我不知道的是,要被接受为类型列表,env var必须是什么样子。我试过: ( "item1" "item2" ) ["item1","item2"] "item1":"item2" 所有三个符号都会引发配置异常: 配置错误[env var ES_NODES:elasticsearch.hosts的类型为STRING而不是LIST] 如何告诉play将环境变量解

我试图做的是将list类型的配置变量设置为环境变量。 我知道我可以使用如下环境变量:

variable = ${?ENV_VAR}
但我不知道的是,要被接受为类型列表,env var必须是什么样子。我试过:

( "item1" "item2" )
["item1","item2"]
"item1":"item2"
所有三个符号都会引发配置异常:

配置错误[env var ES_NODES:elasticsearch.hosts的类型为STRING而不是LIST]

如何告诉play将环境变量解析为列表?

使用play 2.3进行测试 以下是可选解决方案(可能还有其他更漂亮的解决方案……):

环境配置示例:

export KAFKA_BROKERS="12.1.1.2:9092,33.3.3.3:9092"
和播放配置:

kafka.brokersStr = "127.0.0.1:9092","someotherip:9092"
kafka.brokersStr = ${?KAFKA_BROKERS}
kafka.brokers = [${kafka.brokersStr}]
如果未定义$KAFKA_BROKERS,则忽略“KAFKA.brokerstr”中的第二个赋值


问题是,如果没有定义KAFKA_BROKERS,并且我们将在列表中直接使用它,“KAFKA.BROKERS”将是“[]”,并覆盖任何默认配置,即使$KAFKA_BROKERS中没有值

坏例子:
在play application.conf中有一个功能,如果将环境变量设置为未定义的环境变量,则配置将使用以前的值:例如 未定义环境变量AA,在配置中您有以下内容:

a.a = "aa" 
a.a = ${?AA}
a、 a仍然是“aa”

但如果a.a是一个列表:

a.a = ["aa"]
a.a = [${?AA}]

a、 a将是一个空列表“[]”

您的配置是语法错误:
com.typesafe.config.ConfigException$Parse:String:3:Key“someotherip:9092”后面可能没有标记:“kafka.brokerstr”(如果您打算将“kafka.brokerstr”作为键或字符串值的一部分,请尝试将键或值括在双引号中)