web-dev-qa-db-ja.com

typesafeconfigの環境変数で構成をオーバーライドする

typesafe config を使用して、参照構成を環境変数でオーバーライドするにはどうすればよいですか?たとえば、次の構成があるとします。

foo: "bar"

環境変数FOOが存在する場合は、それをオーバーライドしてほしい。

13

私があなたの質問を正しく理解した場合、答えは ここ です。できるよ

foo: "bar"
foo: ${?FOO}
13
Marco C

公式 doc はそれを非常に明確に説明し、これに対する複数のオプションをサポートします。ここに簡単な要約があります...

ほとんどの一般的な方法は次の形式を使用することです:

basedir = "/whatever/whatever"
basedir = ${?FORCED_BASEDIR}

環境変数が設定されている場合は、デフォルト値が上書きされます。設定されていない場合は、そのまま残ります。

さらに便利な方法は、JVMプロパティ-Dconfig.override_with_env_vars=trueを使用して構成変数をオーバーライドすることです。この場合、重複する宣言を作成する必要はありません。環境変数には、接頭辞CONFIG_FORCE_を付けて名前を付ける必要があります。ドキュメントで、envvarからconfig名へのマッピングがどのように機能するかを確認してください。例として、CONFIG_FORCE_a_b__c___da.b-c_dにマップされます。

最後に、独自のマッピングをロールアウトする場合は、override_with_env_varsを使用せずに上記のオプションと同様に、シェルを使用できます。以下に説明するようにハッキング。

環境変数を使用する必要があり、それらの名前が構成名と一致している場合は、このようなbashスクリプトを使用して、環境変数からJVM cmdargsに自動的に変換できます。これらの-D JVM引数は、TypesafeConfig値をオーバーライドします。例:

# export my_PROP1=1
# export my_PROP2=2
#
# props=$(env | grep my_ | awk '{print "-D"$_}' ORS=' ')
#
# echo "JVM executable command is: Java $props some.jar"
JVM executable command is: Java -Dmy_PROP2=2 -Dmy_PROP1=1  some.jar

大文字を小文字に変換し、構成値に直接マップされない場合は、必要に応じてenv変数に対して部分文字列操作を実行します。

4
yǝsʞǝla

Systemプロパティを使用しています-Dconfig.override_with_env_vars=true。これにより、すべてのプロパティが環境変数を介して自動的に上書きされます。

0
Harold L. Brown