首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧"spring.profiles.include“覆盖

弹簧"spring.profiles.include“覆盖
EN

Stack Overflow用户
提问于 2017-11-18 16:03:42
回答 5查看 45.5K关注 0票数 30

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

因此,在弹簧参考中,我看到spring.profiles.include应该只添加引用概要文件中的属性。

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

但是,从我所检查的情况来看,它是重写它的。因此,当有两个配置文件foo和bar时,在单独的yaml文件中:

申请-foo.yaml:

代码语言:javascript
复制
myproperty: 44

申请-bar.yaml:

代码语言:javascript
复制
spring:
  profiles:
    include: foo
    active: bar,foo
myproperty: 55

在IDE中设置-Dspring.profiles.active=bar变量,myproperty的运行时值为44。这意味着barfoo覆盖,它应该只添加属性,而不是覆盖属性。启动应用程序时,我得到:

以下概要文件处于活动状态: foo,bar

在另一个问题中,我将spring.profiles.active=bar添加到application-bar.yaml中,但它并没有影响--在属性存在或不存在时没有区别(我还尝试使用破折号列表而不是逗号分隔的值)。

我的问题是,它是否应该如何工作(那么Spring引用是误导性的)?如果是的话,是否有解决办法?

链接添加到github上的应用程序源代码中。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-19 02:38:51

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

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

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

-Dspring.profiles.active=prd

将与application-prd.ymlapplication.yml一起使用

-Dspring.profiles.active=dev

将与application-dev.ymlapplication.yml一起使用

票数 24
EN

Stack Overflow用户

发布于 2017-11-18 16:35:27

根据spring文档这里spring.profiles.include用于添加其他配置文件中的属性。如果属性不在活动配置文件中,它将从其他配置文件中添加该属性。但是如果它是存在的,那么它就会被覆盖,最后一个要应用的就赢了。

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

票数 13
EN

Stack Overflow用户

发布于 2021-04-05 16:17:34

SpringBoot2.4修改了包含多个配置文件的机制,以使用新的剖面群特性,而不是在配置文件特定的文档中使用spring.profiles.include。这意味着您的配置对于Spring的新版本不再有效,需要进行更改。

尽管如此,您的用例似乎并不适合配置文件组,因为它并不是真正地将两个配置文件组合在一起,而是覆盖所有的缺省值。因此,我建议使用建议的在另一个答案中方法,将公共和默认属性放在共享的application.yaml文件中,并且只在特定于配置文件的文档中包含特定于环境的值和重写。

application.yaml

代码语言:javascript
复制
spring:
  myproperty: 44 # Default value

application-bar.yaml

代码语言:javascript
复制
spring:
  myproperty: 55 # Override default

注意,Spring支持多文档文件,因此如果需要,可以将它们合并到一个application.yaml文件中:

代码语言:javascript
复制
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组,它由proddbprodmq配置文件组成。 弹簧:型材:集团:生产:- "proddb“- "prodmq” 我们的应用程序现在可以使用--spring.profiles.active=production在一击中激活productionproddbprodmq配置文件。

迁移指南指出spring.profile.group属性不能在特定于配置文件的文档中使用。

spring.profile.group属性不能在特定于配置文件的文档中使用.

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47368086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档