Pytanie Łączenie wielu plików konfiguracyjnych TypeSafe i rozwiązywanie dopiero po ich scaleniu


Piszę kod testowy w celu sprawdzenia poprawności usługi REST. Chcę móc wskazać to w każdym z naszych różnych środowisk, po prostu zmieniając zmienną środowiskową przed wykonaniem testów.

Chcę móc połączyć trzy różne pliki konfiguracyjne:

  • conf/env/default.conf - domyślne wartości konfiguracyjne dla wszystkich środowisk
  • conf/env/<env>.conf - specyficzne dla środowiska wartości
  • application.conf - nadpisania użytkownika któregokolwiek z powyżej

Chodzi o to, że nie chcę wszystkiego w jednym pliku konfiguracyjnym i ryzykuję złą edycją, która powoduje zgubienie elementów konfiguracji. Zamiast tego zachowaj je oddzielnie i daj użytkownikowi możliwość nadpisania ich.

Oto, gdzie robi się trudno: default.conf będzie zawierać $ {referencje} do rzeczy, które mają zostać przesłonięte <env>.confi mogą być dalej przesłonięte application.conf.

Muszę odłożyć rozwiązanie, dopóki wszystkie trzy nie zostaną scalone. Jak mogę to zrobić?


14
2018-03-03 17:37


pochodzenie




Odpowiedzi:


Odpowiedź polega na użyciu ConfigFactory.parseResource() zamiast ConfigFactory.load().

Oto końcowy wynik

private lazy val defaultConfig     = ConfigFactory.parseResources("conf/env/default.conf")
private lazy val environmentConfig = ConfigFactory.parseResources("conf/env/" + env + ".conf" )
private lazy val userConfig        = ConfigFactory.parseResources("application.conf")
private lazy val config = userConfig
                          .withFallback(environmentConfig)
                          .withFallback(defaultConfig)
                          .resolve()

23
2018-03-07 15:47



Prawdopodobnie powinno to zostać wyjaśnione tutaj github.com/typesafehub/config - Carlos Bribiescas
Rekwizyty na wezwanie do rozwiązania. Dobra, bezpieczna gra. - F. P. Freely