为什么 env 变量没有覆盖 spring 的配置?

问题描述 投票:0回答:1

我有一个带有

ConfigurationProperties
类的 spring-boot 应用程序。我正在使用 helm + kubernetes 部署应用程序,因此传递 env 变量以覆盖配置值。但不知何故,有些变量没有被这个环境变量覆盖,我不明白为什么。配置类如下所示:

@ConstructorBinding
@ConfigurationProperties("abc-config")
data class AbcConfiguration(
    private var authorizationConfigs: List<TokenGrantConfiguration> = listOf(),
) {}

class TokenGrantConfiguration(
    clientId: String,
    clientSecret: String,
)

我的环境变量是这样的:

ABC_CONFIG_AUTHORIZATION_CONFIGS_0_CLIENT_ID="some_client_id"
ABC_CONFIG_AUTHORIZATION_CONFIGS_0_CLIENT_SECRET="some_client_secret"

补充一下,我的应用程序也有

SPRING_APPLICATION_JSON
变量为:

{
    abc-config: {
      "authorization-configs": [
        {
          "clientId": "",
          "clientSecret": ""
        }
      ]
    }
}

所以当我运行应用程序时,clientId 和 secret 值都是空的,没有被环境变量覆盖。我还检查了

System.env("...")
以检查env变量是否设置正确并且它们看起来是正确的。

知道我遗漏了什么吗?

谢谢

spring-boot environment-variables kubernetes-helm spring-boot-configuration
1个回答
0
投票

必须按如下方式将环境变量放入 SPRING_APPLICATION_JSON 中:

SPRING_APPLICATION_JSON = {
        abc-config: {
          "authorization-configs": [
            {
              "clientId": "${ABC_CONFIG_AUTHORIZATION_CONFIGS_0_CLIENT_ID}",
              "clientSecret": "${ABC_CONFIG_AUTHORIZATION_CONFIGS_0_CLIENT_SECRET}"
            }
          ]
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.