我的意图是在 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 许可协议
我们以稍微不同的方式实现了 Spring 活动配置文件。假设默认属性文件
application.yml
包含在生产和开发环境中相同的所有默认值。分别为名为
application-prd.yml
和application-dev.yml
的生产和开发文件创建单独的属性。这些文件可能包含额外的属性或覆盖一些默认属性。在应用程序启动期间,我们将
spring.profiles.active
作为环境变量传递。例如,-Dspring.profiles.active=prd
将拿起
application-prd.yml
连同application.yml
或者
-Dspring.profiles.active=dev
将拿起
application-dev.yml
连同application.yml