Spring“spring.profiles.include”覆盖

新手上路,请多包涵

我的意图是在 Spring Boot 应用程序中有两个配置文件 - 开发和生产一个。开发配置文件只是为了覆盖生产配置文件的一些变量(例如内存数据库而不是云中的数据库)。正如我预计将来会对生产配置文件进行一些更改,在开发配置文件中复制变量似乎不是一个解决方案。

因此,在 Spring Reference 中,我读到 spring.profiles.include 应该只从引用的配置文件中添加属性。

有时,将特定于配置文件的属性 添加 到活动配置文件而不是替换它们是有用的。 spring.profiles.include 属性可用于无条件添加活动配置文件。

但是,从我检查的内容来看,它会覆盖它。因此,当有两个配置文件 foo 和 bar 时,在单独的 yaml 文件中:

应用程序-foo.yaml:

 myproperty: 44

应用程序bar.yaml:

 spring:
  profiles:
    include: foo
    active: bar,foo
myproperty: 55

And setting -Dspring.profiles.active=bar variable in IDE, the runtime value of myproperty is 44. That means that bar , is overriden with foo which was应该只添加属性,而不是覆盖它们。启动应用程序时,我得到:

以下配置文件处于活动状态: foo,bar

我在另一个问题中按照this answer 的建议将 spring.profiles.active=bar 添加到 application-bar.yaml ,但它没有效果 - 属性是否存在时没有区别(我也尝试使用破折号列表而不是逗号分隔值)。

我的问题是,它应该如何工作(然后 Spring Reference 具有误导性)?如果是这样,有什么解决方案吗?

在 github 上添加指向应用程序源代码的 链接

原文由 Daniel Szymatowicz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

我们以稍微不同的方式实现了 Spring 活动配置文件。假设默认属性文件 application.yml 包含在生产和开发环境中相同的所有默认值。

分别为名为 application-prd.ymlapplication-dev.yml 的生产和开发文件创建单独的属性。这些文件可能包含额外的属性或覆盖一些默认属性。

在应用程序启动期间,我们将 spring.profiles.active 作为环境变量传递。例如,

-Dspring.profiles.active=prd

将拿起 application-prd.yml 连同 application.yml

或者

-Dspring.profiles.active=dev

将拿起 application-dev.yml 连同 application.yml

原文由 Indra Basak 发布,翻译遵循 CC BY-SA 3.0 许可协议

根据 这里 的 spring boot 文档, spring.profiles.include 用于添加来自其他配置文件的属性。如果该属性不存在于活动配置文件中,它将添加来自其他配置文件的属性。但如果它存在,那么它将覆盖并且最后应用的获胜

有时,将特定于配置文件的属性 添加 到活动配置文件而不是替换它们是有用的。 spring.profiles.include 属性可用于无条件添加活动配置文件。

原文由 pvpkiran 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题