【问题标题】:Combine list from multiple spring-boot YAML files合并来自多个 spring-boot YAML 文件的列表
【发布时间】:2017-05-01 10:03:39
【问题描述】:

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

例子:

postgres.yml 包含我的 postgres 数据库信息。它还包含我的迁移脚本的飞行路径位置:

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

我的 oracle 迁移也是如此:

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

现在,如果我想使用测试数据启动我的应用程序,我还想包含我的 test_data 目录(这些数据适用于 postgres 和 oracle):

---
flyway:
  locations:
    - flyway/test_data

当我使用活动配置文件 postgres,testdata 运行应用程序时,不会加载迁移,因为位置条目已被测试数据文件覆盖。

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

【问题讨论】:

    标签: spring-boot flyway test-data


    【解决方案1】:

    不幸的是,正如Spring docs 中所述,目前这是不可能的。如果您提前知道一组配置文件名称,您可能可以通过创建单独的列表来解决这个问题,以配置文件名称为前缀,然后在您的 bean 中包含将它们合并到最终列表中的代码。该代码只会遍历所有已知的配置文件名称前缀,如果配置文件未处于活动状态,则该列表将为空。

    不幸的是,如果您不拥有 bean,这似乎更难,例如在您的 Flyway 案例中。不过还是有可能的。

    【讨论】:

      【解决方案2】:

      可怕的 hack:如果您通过调用创建多个 SpringBoot 应用程序上下文会怎样

      SpringApplication.run(MyClass.class)

      多次使用不同的配置文件。获取不同的列表并将它们合并为一个。

      【讨论】:

      • 所以我让我的代码适应我的个人资料?不...我只是将测试数据移动到另一个键 abd 始终提供完整列表。
      猜你喜欢
      • 2016-10-24
      • 2017-08-18
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2016-01-17
      • 2021-06-04
      相关资源
      最近更新 更多