通过合并yml文件启动Spring Application

lak*_*hmi 6 spring-boot

Spring Boot中是否可以合并来自不同配置文件的属性并启动应用程序?

例如:默认情况下使用的我的application-local.yml具有以下属性

server:
  port: 8080
spring:
  profiles: local

propertyA: xxx
propertyB: yyy
Run Code Online (Sandbox Code Playgroud)

现在,不必将所有属性从本地复制到像这样的application-QA.yml

server:
  port: 8081
spring:
  profiles: local

propertyA: xxx
propertyB: zzz
Run Code Online (Sandbox Code Playgroud)

仅在端口和propertyB已更新的地方,我可以像下面这样吗?

application-QA.yml:

server:
  port: 8081
propertyB: zzz
Run Code Online (Sandbox Code Playgroud)

最后,我希望具备以下能力来开始我的申请

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

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

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

Ste*_*com 7

您可以使用弹簧配置文件执行此操作。您可以同时激活多个配置文件,每个配置文件将从附加的应用程序-.yml 中读取属性

  • 如果您激活配置文件“本地”,spring 将搜索文件 application-local.yml
  • 如果您激活配置文件“QA”,spring 将搜索文件 application-QA.yml

因此,您可以在 application-local.yml 中设置通用属性,并且仅设置不同的属性,例如 application-QA.yml 中的端口。

您可以同时激活两个配置文件

-Dspring.profiles.active=local,QA
Run Code Online (Sandbox Code Playgroud)

另请参阅spring howto-properties-and-configuration