使用环境变量设置类型列表的Play Framework配置变量

时间:2015-02-02 00:15:45

标签: configuration environment-variables playframework-2.3

我要做的是将类型列表的配置变量设置为环境变量。 我知道我可以使用这样的env变量:

variable = ${?ENV_VAR}

但我不知道的是env var必须如何被接受为类型列表。我试过了:

( "item1" "item2" )
["item1","item2"]
"item1":"item2"

所有三种表示法都会抛出配置异常:

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

如何告诉play将env var解析为列表?

1 个答案:

答案 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将是一个空列表“[]”