我有一个带有
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_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}"
}
]
}
}