Как переопределить массив в конфигурации Typesafe с помощью переменных среды?

Я использовал функцию подстановки переменных среды в Типобезопасная конфигурация:

foo = "foo"
foo = ${?FOO}

Это приводит к значению «по умолчанию» «foo», если нет переменной среды с именем FOO. В этом случае второе объявление значения (foo = ${?FOO} просто отбрасывается). Однако, если переменная с именем FOO существует, библиотека "заменит" значение FOO и присвоит его foo.

Я хотел бы подобное поведение с массивами, но, к сожалению, это не работает так, как ожидалось:

foo = [ "1", "2" ]
foo = [ ${?f1}, ${?f2} ]

В случае, когда f1 и f2 не определены, это просто приводит к тому, что foo является пустым массивом. Моя цель — добиться такого же эффекта, как указано выше (отбросить второй foo, если переменные окружения f1 и f2 не определены). Любые идеи/предложения приветствуются. Спасибо.


person naivedeveloper    schedule 09.01.2017    source источник
comment
Не идеально, но если вы можете справиться с этим в коде приложения, не могли бы вы добавить значения по умолчанию к необязательным значениям из среды, а затем сделать, например. проверка длины? foo = [ ${?f1}, ${?f2} ] foo += "1" foo += "2" Вышеупомянутое даст вам все, что установлено в среде, за которой следуют два значения по умолчанию. Вы также можете начать с пустого массива для foo и добавить две переменные среды.   -  person MrProper    schedule 10.02.2017


Ответы (1)


Я обнаружил, что использование a = ${?VARNAME} в файле конфигурации HOCON с кодом Scala, ожидающим List, и использование -DVARNAME.0=something (или просто VARNAME.0=something) приведет к правильному значению ["something"]. (Протестировано с Play 2.6.13 и фильтром AllowedHosts.)

person PAStheLoD    schedule 10.07.2018
comment
Что делать, если значением массива является объект? будет ли работать -DVARNAME.0.fieldName=something, или я должен передать весь объект? - person Can; 29.10.2019
comment
@ Может да, я считаю, что это то, что я сделал, чтобы получить что-то похожее на работу. - person tilde; 12.11.2019