Dan*_*icz 13 spring spring-profiles spring-boot
我的目的是在spring boot应用程序中有两个配置文件 - 开发和生产.开发配置文件只是为了覆盖生产轮廓一些变量(如内存数据库,而不是数据库云).由于我预计将来会对生产配置文件进行一些更改,因此在开发配置文件中复制变量似乎不是一种解决方案.
因此,在Spring Reference中我读过,spring.profiles.include它应该只添加引用的配置文件中的属性,但是从我检查它的内容中反而覆盖了它.因此,当有两个配置文件foo和bar时,在单独的yaml文件中:
应用foo.yaml:
myproperty: 44
Run Code Online (Sandbox Code Playgroud)
应用bar.yaml:
spring:
profiles:
include: foo
active: bar,foo
myproperty: 55
Run Code Online (Sandbox Code Playgroud)
-Dspring.profiles.active=bar在IDE中设置变量,运行时值为myproperty44.这意味着bar,覆盖foo它应该只添加属性,但不覆盖它们.启动应用程序时,我得到:
以下配置文件处于活动状态:foo,bar
我加入spring.profiles.active=bar到application-bar.yaml这个所建议的答案,在另一个问题,但它没有任何效果-有当时的物业是否有与否没有差别(我也使用破折号上市逗号分隔值,而不是尝试过).
我的问题是,它是如何工作的(那么Spring Reference是误导性的)?如果是这样,有什么解决方案吗?
在github上添加应用程序源代码的链接.
Ind*_*sak 11
我们以稍微不同的方式实现了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
M. *_*tin 11
Spring Boot 2.4 更改了包含多个配置文件的机制,以使用新的配置文件组功能,而不是spring.profiles.include在特定于配置文件的文档中使用。这意味着您的配置对于新版本的 Spring Boot 不再有效,需要更改。
也就是说,您的用例似乎不太适合配置文件组,因为它并不是真正组合两个配置文件,而是覆盖默认值。因此,我建议使用另一个答案中建议的方法,将通用属性和默认属性放入共享application.yaml文件中,并且仅在特定于配置文件的文档中包含特定于环境的值和覆盖。
应用程序.yaml
\nspring:\n myproperty: 44 # Default value\nRun Code Online (Sandbox Code Playgroud)\n应用程序栏.yaml
\nspring:\n myproperty: 55 # Override default\nRun Code Online (Sandbox Code Playgroud)\n请注意,Spring Boot 支持多文档文件application.yaml,因此如果需要,可以将这些文件组合成一个文件:
spring:\n myproperty: 44 # Default value\n---\nspring.config.activate.on-profile: bar # These configs apply to the bar profile\nspring:\n myproperty: 55 # Override default\nRun Code Online (Sandbox Code Playgroud)\n从 Spring Boot 2.4 开始,不再可能spring.profiles.include在特定于配置文件的文档中使用,除非使用spring.config.use-legacy-processing=true. 根据 2.4 Spring Boot 配置数据迁移指南:
\n\n\n您仍然可以使用 spring.profiles.include 属性,但只能在非特定于配置文件的文档中使用。
\n
\n\n如上所述,它\xe2\x80\x99s 不再可能
\nspring.profiles.include在特定于配置文件的文档中使用,因此该文件\xe2\x80\x99t 无效。由于这个用例非常常见,我们\xe2\x80\x99尝试提供另一种方式来支持它。在 Spring Boot 2.4 中,您可以使用\xe2\x80\x9cprofile groups\xe2\x80\x9d功能。
\n
Spring Boot 参考指南的配置文件组部分记录了此功能:
\n\n\n配置文件组允许您为相关配置文件组定义逻辑名称。
\n例如,我们可以创建一个由我们的和配置文件
\nproduction组成的组。proddbprodmqRun Code Online (Sandbox Code Playgroud)\nspring:\n profiles:\n group:\n production:\n - "proddb"\n - "prodmq"\n现在可以启动我们的应用程序,一键
\n--spring.profiles.active=production激活production、proddb和配置文件。prodmq
迁移指南指出该spring.profile.group属性不能在特定于配置文件的文档中使用。
\n\n该
\nspring.profile.group属性不能在特定于配置文件的文档中使用。
小智 5
您可以在以下位置添加新配置文件application-bar.yaml:
spring.profiles.include: foo,foo-override
myproperty: 33
---
spring.profiles: foo-override
myproperty: 55
Run Code Online (Sandbox Code Playgroud)
顺序是:33 in baroverridden by44 in foo被覆盖55 in foo-override。
| 归档时间: |
|
| 查看次数: |
11423 次 |
| 最近记录: |