合并来自多个 spring-boot YAML 文件的列表
Combine list from multiple spring-boot YAML files
是否可以合并来自多个 spring-用 YAML 编写的引导配置文件的相同元素的列表?
示例:
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 docs 中所述,这目前是不可能的。如果您提前知道配置文件名称集,您可能可以通过创建单独的列表来解决这个问题,列表以配置文件名称为前缀,然后在您的 bean 中包含将它们合并到最终列表中的代码。该代码只会遍历所有已知的配置文件名称前缀,如果配置文件未激活,则该列表将为空。
不幸的是,如果您不拥有该 bean,这似乎更难,例如在您的 Flyway 案例中。不过还是有可能的。
可怕的 hack:如果您通过调用
创建了多个 SpringBoot 应用程序上下文会怎样
SpringApplication.run(MyClass.class)
多次使用不同的配置文件。获取不同的列表并将它们合并为一个。
是否可以合并来自多个 spring-用 YAML 编写的引导配置文件的相同元素的列表?
示例:
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 docs 中所述,这目前是不可能的。如果您提前知道配置文件名称集,您可能可以通过创建单独的列表来解决这个问题,列表以配置文件名称为前缀,然后在您的 bean 中包含将它们合并到最终列表中的代码。该代码只会遍历所有已知的配置文件名称前缀,如果配置文件未激活,则该列表将为空。
不幸的是,如果您不拥有该 bean,这似乎更难,例如在您的 Flyway 案例中。不过还是有可能的。
可怕的 hack:如果您通过调用
创建了多个 SpringBoot 应用程序上下文会怎样SpringApplication.run(MyClass.class)
多次使用不同的配置文件。获取不同的列表并将它们合并为一个。