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

Spring Boot 3.3.x升级到3.4.x后SecretManager配置导入(sm:///sm@)延迟初始化问题求助

Spring Boot 3.3.x升级到3.4.x后SecretManager配置导入(sm:///sm@)延迟初始化问题求助

最近我把Spring Boot应用从3.3.x版本升级到了3.4.6,连带底层的Spring Framework也同步升级到了6.2.7。结果刚升级完就碰到了一个致命问题:通过云Secret Manager管理的密钥在应用启动时初始化太晚,直接导致了PropertyNotFoundException错误,应用根本启动不起来。

问题详情

我们的应用通过Spring Cloud的spring.config.import特性集成云Secret Manager(比如GCP Secret Manager,不过这个问题看起来对所有用spring.config.import加载外部密钥的场景都通用),在application.yml里直接用sm://或者sm@前缀引用密钥,配置大概是这样的:

# application.yml
spring:
  config:
    import: sm://
  data:
    database:
      uri: ${sm://<PATH_TO_SECRET_FOR_URI>} # 或者 ${sm@<PATH_TO_SECRET_FOR_URI>}
      username: ${sm://<PATH_TO_SECRET_FOR_USERNAME>}
      password: ${sm://<PATH_TO_SECRET_FOR_PASSWORD>}

在升级到3.4.x之前(用3.3.x的时候),这套配置完全没问题:Spring Cloud的集成会在所有依赖这些密钥的bean初始化之前,就从Secret Manager拉取所有需要的密钥,把它们映射到Spring的Environment里。

但升级到3.4.6之后,我们每次启动都会碰到PropertyNotFoundException或者类似的启动失败错误。看起来现在有些应用组件或bean,会在sm:///sm@的导入机制还没把密钥完全加载并注册到Spring Environment之前,就去访问这些依赖密钥的属性了。

我的环境配置

  • 旧Spring Boot版本:3.3.x
  • 新Spring Boot版本:3.4.6
  • 底层Spring Framework版本:6.2.7
  • 密钥管理器集成:通过spring.config.import搭配sm://或sm@前缀(依赖Spring Cloud GCP这类starter)

错误现象

应用启动直接失败,错误提示spring.data.database.uri、username这类依赖密钥的属性无法解析,本质就是sm:///sm@的导入机制还没完成密钥的加载和注册,就有bean尝试读取这些属性了。

想请教一下:有没有人在从Spring Boot 3.3.x升级到3.4.x时,碰到过类似的spring.config.import外部密钥初始化延迟的问题?在Spring Boot 3.4.x里,要怎么确保通过这种方式导入的密钥能在应用启动早期就准备好,避免依赖这些属性的bean初始化时出错?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:15:34