2016-07-05 41 views
1

使用typesafe config,如何用環境變量覆蓋參考配置?例如,可以說我有以下配置:在類型安全配置中使用環境變量覆蓋配置

foo: "bar" 

我希望它與環境變量FOO如果存在被重寫。

+0

您可以嘗試其他方法,如:http://stackoverflow.com/questions/24966621/overriding-multiple-config-values-in-typesafe-config-when-using-an-uberjar-to-de/24967100# 24967100。我會建議用'-D' JVM參數覆蓋它們 - 你不需要事先知道/實現任何東西。 –

+0

謝謝,但我對這個建議的問題是,我需要將給定的環境變量轉換爲另一個文件(並快速轉換鍵)以便使用引用的答案,或者特別提及每個參數作爲系統屬性 - 這是我目前所做的 - 但它很難管理,並導致大量的雙重維護 –

+0

您只需提及您在配置文件或CMD參數中覆蓋的參數。不需要列出所有值 –

回答

2

如果我正確理解你的問題,答案是here。 你可以做

foo: "bar" 
foo: ${?FOO} 
+1

我猜我錯過了那部分,但它使配置文件非常繁瑣 - 我需要複製所有我想重寫的字段,並且我需要知道我想重寫某個變量。 –

0

如果必須使用環境變量,如果他們的命名是與配置的名稱一致,您可以使用一個bash腳本這樣自動從您的環境轉換瓦爾JVM的CMD ARGS。這些-D JVM參數將覆蓋Typesafe Config值。例如:

# 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瓦爾請你,如果他們不直接映射到你的配置價值。