合并来自多个spring-boot YAML文件的列表

raz*_*azr 5 test-data flyway spring-boot

是否可以组合使用YAML编写的多个spring-boot配置文件中相同元素的列表?

例:

postgres.yml包含我的postgres db信息.它还包含我的迁移脚本的flyway位置:

---
flyway:
  locations:
    - flyway/migrations/postgres
Run Code Online (Sandbox Code Playgroud)

与我的oracle迁移相同:

---
flyway:
  locations:
    - flyway/migrations/oracle
Run Code Online (Sandbox Code Playgroud)

现在,如果我想用test-data启动我的应用程序,我想要包含我的test_data目录(这些数据适用于postgres和oracle):

---
flyway:
  locations:
    - flyway/test_data
Run Code Online (Sandbox Code Playgroud)

当我使用活动配置文件运行应用程序时,postgres,testdata不会加载迁移,因为location-entry被test-data-file覆盖.

对于这个设置,我可以创建四个配置文件来运行带有和没有测试数据的每个数据库,但如果我有四个不同的数据库和三组测试数据,我该怎么办?

dei*_*jer 2

不幸的是,正如Spring 文档中所述,目前这是不可能的。如果您提前知道配置文件名称集,则可以通过创建单独的列表(以配置文件名称为前缀)来解决此问题,然后在您的 bean 中添加将它们合并到最终列表中的代码。该代码只会迭代所有已知的配置文件名称前缀,如果配置文件未激活,则该列表将为空。

不幸的是,如果您不拥有该豆(例如您的 Flyway 案例),这似乎会更困难。不过,这可能仍然是可能的。