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

rbl8hiat  于 2023-03-18  发布在  Spring
关注(0)|答案(1)|浏览(125)

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

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

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

我的env变量是这样的:

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值都为空,不会被env变量覆盖。我还使用System.env("...")检查了env变量是否设置正确,它们看起来是正确的。
你知道我错过了什么吗?
谢谢

ecfdbz9o

ecfdbz9o1#

要将环境变量放入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}"
            }
          ]
        }
    }

相关问题