Установить переменную конфигурации Play Framework из списка типов с переменной среды

То, что я пытаюсь сделать, это установить переменную конфигурации списка типов в качестве переменной среды. Я знаю, что могу использовать переменные env следующим образом:

variable = ${?ENV_VAR}

Но чего я не знаю, так это того, как должен выглядеть env var, чтобы его можно было принять в качестве списка типов. Я пытался:

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

Все три нотации вызывают исключение конфигурации:

Ошибка конфигурации [env var ES_NODES: elasticsearch.hosts имеет тип STRING, а не LIST]

Как я могу сказать игре анализировать env var как список?


person MeiSign    schedule 02.02.2015    source источник


Ответы (1)


протестировано с игрой 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.brokersStr" будет проигнорировано.


Проблема в том, что если KAFKA_BROKERS не определен и если мы будем использовать его непосредственно в списке, «kafka.brokers» будет «[]» и переопределит любую конфигурацию по умолчанию, даже если в $KAFKA_BROKERS нет значения.

Плохой пример:
В play application.conf есть функция, согласно которой, если env var установлена ​​на неопределенную env var, конфигурация будет использовать предыдущее значение: например, env var AA не определена, а в conf вы видите следующее :

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

аа по-прежнему будет "аа"

но если a.a был списком:

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

a.a будет пустым списком "[]"

person ozma    schedule 30.03.2015
comment
ваша конфигурация - синтаксическая ошибка: com.typesafe.config.ConfigException$Parse: String: 3: Key '"someotherip:9092"' may not be followed by token: 'kafka.brokersStr' (if you intended 'kafka.brokersStr' to be part of a key or string value, try enclosing the key or value in double quotes) - person Bùi Việt Thành; 05.06.2016