¿Es posible combinar listas de los mismos elementos de varios archivos de configuración de arranque de primavera escritos en YAML?

Ejemplo:

postgres.yml contiene la información de mi base de datos de postgres. También contiene la ubicación de la ruta migratoria de mis scripts de migración:

---
flyway:
  locations:
    - flyway/migrations/postgres

Lo mismo con mis migraciones de Oracle:

---
flyway:
  locations:
    - flyway/migrations/oracle

Ahora, si quiero iniciar mi aplicación con test-data, también quiero incluir mi directorio test_data (esos datos funcionan tanto para postgres como para oracle):

---
flyway:
  locations:
    - flyway/test_data

Cuando ejecuto la aplicación con perfiles activos postgres,testdata, las migraciones no se cargan, ya que la entrada de ubicaciones es anulada por el archivo de datos de prueba.

Para esta configuración, podría crear cuatro archivos de configuración para ejecutar cada base de datos con y sin los datos de prueba, pero ¿qué haría si tengo cuatro bases de datos diferentes y tres conjuntos de datos de prueba?

5
razr 15 dic. 2016 a las 20:45

2 respuestas

La mejor respuesta

Desafortunadamente, como se describe en Spring docs, esto no es posible actualmente. Si conoce el conjunto de nombres de perfil de antemano, probablemente podría solucionar esto creando listas separadas, con el prefijo del nombre del perfil, y luego en su bean, tenga un código que los combine en la lista final. Ese código simplemente iteraría sobre todos los prefijos de nombre de perfil conocidos, y si un perfil no estuviera activo, esa lista estaría vacía.

Desafortunadamente, esto parece más difícil si no posee el bean, como en su caso de Flyway. Sin embargo, aún podría ser posible.

1
deinspanjer 31 dic. 2016 a las 15:46

Awful hack: ¿y si crearas varios contextos de aplicaciones Spring Boot invocando

SpringApplication.run (MyClass.class)

Varias veces con un perfil diferente cada una. Adquiera las listas distintas y combínelas en una.

-1
gabor 7 feb. 2019 a las 13:09