2015-10-18 64 views
2

我看: https://github.com/typesafehub/config合併多層次的安全類型/阿卡配置

比方說,我想有一個默認的配置,例如reference.conf,然後我想要開發/產品覆蓋(兩個不同的application.conf),然後我也希望從application.conf繼承並最終使用默認的reference.conf來繼承主機特定的覆蓋。我將如何做到這一點?

如我想象的目錄結構是這樣的:

resources/reference.conf 
resources/prod/application.conf 
resources/prod/master.conf 
resources/prod/slave.conf 
resources/dev/application.conf 
resources/dev/master.conf 
resources/dev/slave.conf 

或者,也許這將是一種資源的/ dev /主/ application.conf?

某處我會指定一個環境,即可能從應用程序啓動的主機名中提取。

如果應用程序master.dev.example.com,我期待我應該可以做這樣的事情:

getConfigurations("dev/master.conf").withDefaultsFrom(
    getConfigurations("dev/application.conf").withDefaultsFrom(
     getConfigurations("resource.conf")) 

,但我有一個很難理解正是將是什麼像使用給定的庫。

我看到我可以設置config.resource系統屬性,但它看起來像只會允許一個級別的覆蓋,dev-application.conf - > resources.conf,不像master-node.conf - > dev-application.conf - > resources.conf。

我看到一個.withFallback方法,但似乎是如果我想在一個文件中混合兩種配置,而不是將資源/文件鏈接在一起。

回答

3

對優先級最高的配置使用多個withFallback。例如:

Config finalConfig = 
    ConfigFactory.systemProperties(). 
    withFallback(masterConfig). 
    withFallback(applicationConfig). 
    withFallback(referenceConfig) 

每個像masterConfig的CONFIGS的將被裝載Config.parseFile。您也可以使用ConfigFactor.load作爲方便,但parseXXX方法可讓您更好地控制層次結構。

+0

只是試過了,它的工作,謝謝! – Brian