我要做的是将类型列表的配置变量设置为环境变量。 我知道我可以使用这样的env变量:
variable = ${?ENV_VAR}
但我不知道的是env var必须如何被接受为类型列表。我试过了:
( "item1" "item2" )
["item1","item2"]
"item1":"item2"
所有三种表示法都会抛出配置异常:
配置错误[env var ES_NODES:elasticsearch.hosts的类型为STRING而不是LIST]
如何告诉play将env var解析为列表?
答案 0 :(得分:1)
用游戏2.3测试 以下是一个可选的解决方案(可能还有其他更漂亮的解决方案......):
env config exmple:
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.brokersStr”的第二次分配。
问题是如果没有定义KAFKA_BROKERS并且我们将直接在列表中使用它,“kafka.brokers”将是“[]”并覆盖任何默认配置,即使$ KAFKA_BROKERS中没有值。 / p>
坏例子:
在play.conf中有一个特性,如果env var设置为未定义的env var,配置将使用以前的值:例如
env var AA没有定义,在conf中你有以下几点:
a.a = "aa"
a.a = ${?AA}
a.a仍将是“aa”
但是如果a.a是一个列表:
a.a = ["aa"]
a.a = [${?AA}]
a.a将是一个空列表“[]”