You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Config重复加载配置且首次未携带指定profile问题

问题根因

Spring Cloud 2020.0及之后版本(包含你使用的2021.0.3)默认废弃旧版Bootstrap上下文配置加载逻辑,改用Spring Boot原生Config Data API(对应日志中的ConfigServerConfigDataLoader)拉取配置中心配置。
当前配置同时引入了spring-cloud-starter-bootstrap依赖,又配置了spring.config.import参数,导致新旧两套配置拉取机制同时生效:

  • 旧机制(ConfigServicePropertySourceLocator)由Bootstrap上下文触发,执行时机极早,此时上下文还未完成spring.profiles.active参数解析,因此默认拉取default环境配置,且该配置优先级更高,会覆盖后续正确加载的配置
  • 新机制(ConfigServerConfigDataLoader)由Spring Boot Config Data逻辑触发,执行时机晚于Bootstrap上下文初始化,可以正常读取active profile,拉取到正确的dev环境配置

注意spring.config.import是仅对新Config Data机制生效的配置项,写在bootstrap.yml中不会被Bootstrap上下文识别,反而会被主上下文读取,触发多余的第二次拉取。

解决方案

二选一即可,禁止两套机制同时启用。

方案1:使用官方推荐的新Config Data机制(推荐)

完全移除旧版Bootstrap相关配置,所有配置遵循Spring Boot原生规范:

  • 从pom.xml中删除spring-cloud-starter-bootstrap依赖
  • 删除bootstrap.yml配置文件,将原有配置迁移到application.yml中,示例如下:
spring:
  application:
    name: myapp
  profiles:
    active: dev
  config:
    import: optional:configserver:http://ip:8888
  cloud:
    config:
      username: admin
      password: secret

该配置下启动时只会触发一次配置拉取,可正确识别dev profile,不会出现重复拉取、配置优先级错乱问题。

方案2:保留旧版Bootstrap上下文机制

如果项目依赖的其他组件必须使用Bootstrap上下文,可完全禁用新Config Data机制的配置中心拉取逻辑,按旧版规范配置:

  • 保留spring-cloud-starter-bootstrap依赖
  • 修改bootstrap.yml,删除spring.config.import配置项,同时显式指定配置中心地址和拉取使用的profile,避免Bootstrap早期加载阶段读不到active参数,示例如下:
spring:
  application:
    name: myapp
  profiles:
    active: dev
  cloud:
    config:
      enabled: true
      uri: http://ip:8888
      profile: dev # 显式指定拉取配置的profile,不依赖上下文自动解析active参数
      username: admin
      password: secret

删除spring.config.import配置后,新机制不会自动触发配置拉取,仅保留Bootstrap上下文的单次拉取逻辑,配置spring.cloud.config.profile后可直接拉取对应环境的配置。

内容的提问来源于stack exchange,提问作者patryks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:18:21