通过合并yml文件启动Spring Application

时间:2016-03-09 21:06:11

标签: spring-boot

春季启动是否有办法合并来自不同配置文件的属性并启动应用程序?

Ex:我的application-local.yml是默认使用的那个,具有以下属性

server:
  port: 8080
spring:
  profiles: local

propertyA: xxx
propertyB: yyy

现在不必复制本地的所有属性,让我们说像这样的application-QA.yml

server:
  port: 8081
spring:
  profiles: local

propertyA: xxx
propertyB: zzz

只有端口& propertyB已更新,我可以在下面找到类似内容吗?

应用QA.yml:

server:
  port: 8081
propertyB: zzz

最后,我想拥有以下启动我的应用程序的能力

  • 与本地 - ./gradlew bootrun  应该从application-local.yml中获取属性,这是现在正在发生的事情
  • 与QA - ./gradlew bootrun -Dsome.property = QA  应合并本地和QA的属性并启动应用程序

现在我们必须复制端口& propertyB到application-local.yml并启动应用程序以指向QA环境,我想消除它。

注意:./gradlew bootrun -Dspring.profiles.active = QA似乎对我不起作用,因为我需要application-local.yml中的所有属性都在application-QA.yml而不仅仅是我要覆盖的属性。

2 个答案:

答案 0 :(得分:3)

您可以使用弹簧配置文件执行此操作。 您可以一起激活多个配置文件,每个配置文件都将读取其他应用程序的属性-..yml

  • 如果激活配置文件“local”,则spring会搜索文件 应用local.yml
  • 如果激活配置文件“QA”,则spring会搜索文件 应用QA.yml

所以你在application-local.yml中设置公共属性,只设置不同的例如application-QA.yml中的端口。

您可以与

一起激活两个配置文件
-Dspring.profiles.active=local,QA

另见spring howto-properties-and-configuration

答案 1 :(得分:1)

您可以使用spring.config.additional-location覆盖选定的属性,而不是替换整个默认属性文件。

此属性取自:

org.springframework.boot.context.config.ConfigFileApplicationListener#CONFIG_ADDITIONAL_LOCATION_PROPERTY