首页 > 解决方案 > 在 Spring Boot 2.4 中使用我的配置文件 dev 覆盖属性

问题描述

我试图超越财产

kafka.servers=s101lbakafpep1:9092,s102lbakafpep2:9092,s101lbakafpep3:9092

在我的src/main/resources/config/application-kafka.properties文件中定义

有了这个值

kafka.servers=localhost:9092

在我的src/main/resources/application-dev.properties文件中定义

我尝试了所有可能的组合,阅读 spring boot doc 在我的 application.properties 中更改的顺序

spring.profiles.active=config,health,planete,dgfip,mapping,kafka,dev
spring.profiles.active=dev,config,health,planete,dgfip,mapping,kafka

将 spring.config.use-legacy-processing 用于 true 或 false 或 .include,始终是 kafka 配置获胜

自从我将 Spring Boot 版本更改为 2.4 后,它不起作用

标签: javaspringspring-boot

解决方案


感谢@gviczai 非常有用的提示,解决了我从 YAML 文件加载和覆盖配置的问题。我完全错过了文档中的以下句子,这使我的单元测试失败,因为值没有像 Spring Boot 2.3 那样被覆盖。

可以将导入视为插入到声明它们的文档下方的附加文档。它们遵循与常规多文档文件相同的自上而下的顺序:一个导入只会被导入一次,无论它被声明多少次。

因此,如果您想覆盖导入的值,则必须在导入后启动一个新文档(--- 在 yaml 中,#--- 在属性中)。

# imported-config.yaml
my-key: my-value
# application.yaml
spring:
    config:
        import:
            - classpath:imported-config.yaml

# before starting a new document the value can not be modified, it would still be "my-value"
my-key: here-overriding-does-not-work
---
# after the start of the new document the value can be modified
my-key: my-overridden-value

推荐阅读