merge - páginas - Fusionar varios archivos de configuración de TypeSafe y resolver solo después de que se hayan fusionado
fusionar paginas de facebook método que si funciona (1)
Estoy escribiendo el código de prueba para validar un servicio RESTful. Quiero poder apuntarlo a cualquiera de nuestros diferentes entornos simplemente cambiando una variable de entorno antes de ejecutar las pruebas.
Quiero poder combinar tres archivos de configuración diferentes:
-
conf/env/default.conf
- los valores de configuración por defecto para todos los entornos -
conf/env/<env>.conf
- los valores específicos del entorno -
application.conf
- las anulaciones del usuario de cualquiera de los anteriores
La idea es que no quiero todo en un solo archivo de configuración, y corro el riesgo de que una edición incorrecta haga que los elementos de configuración se pierdan. Así que, en lugar de eso, manténgalos separados y bríndeles al usuario la posibilidad de anularlos.
Aquí es donde se complica: default.conf
incluirá $ {referencias} a las cosas que están destinadas a ser anuladas en <env>.conf
, y pueden ser anuladas aún más en application.conf
.
Necesito posponer la resolución hasta que los tres se fusionen. ¿Cómo puedo hacer eso?
La respuesta es usar ConfigFactory.parseResource()
en lugar de ConfigFactory.load()
.
Aquí está el resultado final.
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()