我的意图是在Spring Boot应用程序中拥有两个配置文件 - 开发和生产。 开发配置文件仅旨在覆盖生产配置文件的某些变量(例如,使用内存数据库而不是云中的数据库)。 由于我期望未来对生产配置文件进行一些更改,因此在开发配置文件中复制变量似乎不是解决方案。
因此,在 Spring文档中,我读到spring.profiles.include
只会添加指定配置文件中的属性。
有时,具有特定于配置文件的属性并将其添加到活动配置文件中而不是替换它们非常有用。可以使用
spring.profiles.include
属性无条件地添加活动配置文件。
但是,根据我的检查,它实际上是覆盖它。 因此,当有两个配置文件foo和bar时,在单独的yaml文件中:
application-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,bar
我按照答案中提出的建议,在application-bar.yaml
中添加了spring.profiles.active=bar
,但没有效果-当属性存在或不存在时没有区别(我也尝试使用破折号列表而不是逗号分隔值)。
我的问题是,这就是它应该工作的方式吗(那么Spring Reference就是误导性的)?如果是,有没有解决方法?
在github上添加链接以获取应用程序源代码。