如果 Spring Vault 配置被禁用,则回退到本地配置
Fallback to local config if Spring Vault config is disabled
对于开发环境,我已经配置bootstrap.properties
禁用库配置。
spring.cloud.vault.enabled=false
如果它被禁用,那么应用程序应该从本地配置 application.properties 文件中读取属性。但是怎么做呢?
作为解决方法,我在 application.properties
中定义了如下的本地属性
xyz.db.user=${xyz.db.user.fromVault:test}
xyz.db.password=${xyz.db.password.fromVault:test}
因此应用程序首先检查 xyz.db.user.fromVault
属性 是否在保险库中配置。如果不是,则将 xyz.db.user
设置为 test
但这感觉不是正确的方法,因为我需要维护多个属性。有什么好的方法吗?
TL;DR
视情况而定。
说明
为配置属性提供回退值通常是处理默认值的好方法。如果您只有其中几个,那么您可以使用这种方法。
但是,有一个警告:
存储在 Vault 中的数据在某种程度上取决于环境并且通常是敏感的(用户名、密码)。这些不是您想要存储在代码中甚至属性文件中的东西。
您可以有一个单独的属性文件(例如,由配置文件分隔),其中包含您的 non-Vault 环境的值,但实际问题是,为什么您要提供默认值?
如果您有一个需要凭据的远程数据库,您可能想问自己一个问题:如果这些凭据暴露给意外的第三方,会有多大伤害?如果您的回答是:不多,那么将这些凭据存储在 profile-bound 属性文件中是可行的方法。如果它伤害很大,那么我会看到两个选择:
- 使用保险柜(解决敏感数据的实际问题)
- 使用不同的方法(例如 in-memory 数据库)首先消除对凭据的需求。
对于开发环境,我已经配置bootstrap.properties
禁用库配置。
spring.cloud.vault.enabled=false
如果它被禁用,那么应用程序应该从本地配置 application.properties 文件中读取属性。但是怎么做呢?
作为解决方法,我在 application.properties
中定义了如下的本地属性
xyz.db.user=${xyz.db.user.fromVault:test}
xyz.db.password=${xyz.db.password.fromVault:test}
因此应用程序首先检查 xyz.db.user.fromVault
属性 是否在保险库中配置。如果不是,则将 xyz.db.user
设置为 test
但这感觉不是正确的方法,因为我需要维护多个属性。有什么好的方法吗?
TL;DR
视情况而定。
说明
为配置属性提供回退值通常是处理默认值的好方法。如果您只有其中几个,那么您可以使用这种方法。
但是,有一个警告:
存储在 Vault 中的数据在某种程度上取决于环境并且通常是敏感的(用户名、密码)。这些不是您想要存储在代码中甚至属性文件中的东西。
您可以有一个单独的属性文件(例如,由配置文件分隔),其中包含您的 non-Vault 环境的值,但实际问题是,为什么您要提供默认值?
如果您有一个需要凭据的远程数据库,您可能想问自己一个问题:如果这些凭据暴露给意外的第三方,会有多大伤害?如果您的回答是:不多,那么将这些凭据存储在 profile-bound 属性文件中是可行的方法。如果它伤害很大,那么我会看到两个选择:
- 使用保险柜(解决敏感数据的实际问题)
- 使用不同的方法(例如 in-memory 数据库)首先消除对凭据的需求。