【发布时间】:2018-05-02 06:14:06
【问题描述】:
我的意图是在 Spring Boot 应用程序中有两个配置文件 - 开发和生产一个。开发配置文件只是为了覆盖生产配置文件的一些变量(例如内存数据库而不是云中的数据库)。由于我预计将来会对生产配置文件进行一些更改,因此在开发配置文件中复制变量似乎不是一个解决方案。
所以,在Spring Reference 中,我读到spring.profiles.include 应该只从引用的配置文件中添加属性。
有时,将特定于配置文件的属性添加到活动配置文件而不是替换它们是很有用的。
spring.profiles.include属性可用于无条件添加活动配置文件。
但是,根据我的检查,它会覆盖它。因此,当有两个配置文件 foo 和 bar 时,在单独的 yaml 文件中:
应用程序-foo.yaml:
myproperty: 44
application-bar.yaml:
spring:
profiles:
include: foo
active: bar,foo
myproperty: 55
在IDE中设置-Dspring.profiles.active=bar变量,myproperty的运行时值为44。这意味着bar被foo覆盖,它应该只添加属性,而不是覆盖它们。启动应用程序时,我得到:
以下配置文件处于活动状态:foo,bar
我在另一个问题中按照answer 的建议将spring.profiles.active=bar 添加到application-bar.yaml,但它没有效果 - 属性是否存在没有区别(我也尝试使用破折号列表而不是逗号分隔值)。
我的问题是,它应该如何工作(那么 Spring Reference 具有误导性)?如果是这样,有什么解决办法吗?
在 github 上的应用程序源代码中添加 link。
【问题讨论】:
标签: spring spring-boot spring-profiles