我的意图是在一个spring引导应用程序中有两个概要文件--开发和生产配置文件。开发概要文件只是为了覆盖生产概要文件的一些变量(比如内存中的数据库,而不是云中的数据库)。正如我预计将来会对产品配置文件做一些更改一样,在开发概要中复制变量似乎不是一个解决方案。
因此,在弹簧参考中,我看到spring.profiles.include应该只添加引用概要文件中的属性。
有时,将添加到活动配置文件中,而不是替换它们,具有特定于配置文件的属性是很有用的。可以使用
spring.profiles.include属性无条件地添加活动配置文件。
但是,从我所检查的情况来看,它是重写它的。因此,当有两个配置文件foo和bar时,在单独的yaml文件中:
申请-foo.yaml:
myproperty: 44申请-bar.yaml:
spring:
profiles:
include: foo
active: bar,foo
myproperty: 55在IDE中设置-Dspring.profiles.active=bar变量,myproperty的运行时值为44。这意味着bar被foo覆盖,它应该只添加属性,而不是覆盖属性。启动应用程序时,我得到:
以下概要文件处于活动状态: foo,bar
在另一个问题中,我将spring.profiles.active=bar添加到application-bar.yaml中,但它并没有影响--在属性存在或不存在时没有区别(我还尝试使用破折号列表而不是逗号分隔的值)。
我的问题是,它是否应该如何工作(那么Spring引用是误导性的)?如果是的话,是否有解决办法?
将链接添加到github上的应用程序源代码中。
发布于 2017-11-19 02:38:51
我们以稍微不同的方式实现了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一起使用
发布于 2017-11-18 16:35:27
根据spring文档这里,spring.profiles.include用于添加其他配置文件中的属性。如果属性不在活动配置文件中,它将从其他配置文件中添加该属性。但是如果它是存在的,那么它就会被覆盖,最后一个要应用的就赢了。
有时,将添加到活动配置文件中,而不是替换它们,具有特定于配置文件的属性是很有用的。可以使用
spring.profiles.include属性无条件地添加活动配置文件。
发布于 2021-04-05 16:17:34
SpringBoot2.4修改了包含多个配置文件的机制,以使用新的剖面群特性,而不是在配置文件特定的文档中使用spring.profiles.include。这意味着您的配置对于Spring的新版本不再有效,需要进行更改。
尽管如此,您的用例似乎并不适合配置文件组,因为它并不是真正地将两个配置文件组合在一起,而是覆盖所有的缺省值。因此,我建议使用建议的在另一个答案中方法,将公共和默认属性放在共享的application.yaml文件中,并且只在特定于配置文件的文档中包含特定于环境的值和重写。
application.yaml
spring:
myproperty: 44 # Default valueapplication-bar.yaml
spring:
myproperty: 55 # Override default注意,Spring支持多文档文件,因此如果需要,可以将它们合并到一个application.yaml文件中:
spring:
myproperty: 44 # Default value
---
spring.config.activate.on-profile: bar # These configs apply to the bar profile
spring:
myproperty: 55 # Override default相关2.4变动
从SpringBoot2.4开始,就不可能在特定于配置文件的文档中使用spring.profiles.include,除非使用遗留模式启用spring.config.use-legacy-processing=true。根据2.4 Spring Boot Config数据迁移指南
仍然可以使用spring.profiles.include属性,但只能在非特定于配置文件的文档中使用。
如上所述,不再可能在特定于配置文件的文档中使用
spring.profiles.include,因此该文件无效。 由于这种用例很常见,所以我们尝试提供另一种方法来支持它。在SpringBoot2.4中,您可以使用“概况组”特性。
这个特性记录在Spring参考指南的剖面群部分:
配置文件组允许您为相关的配置文件组定义逻辑名称。 例如,我们可以创建一个
production组,它由proddb和prodmq配置文件组成。 弹簧:型材:集团:生产:- "proddb“- "prodmq” 我们的应用程序现在可以使用--spring.profiles.active=production在一击中激活production、proddb和prodmq配置文件。
迁移指南指出,spring.profile.group属性不能在特定于配置文件的文档中使用。
spring.profile.group属性不能在特定于配置文件的文档中使用.
https://stackoverflow.com/questions/47368086
复制相似问题