Spring Boot中如何用Azure Key Vault替换application-test.properties的数据库密码
Spring Boot 集成 Azure Key Vault 获取数据库密码(替代sed注入方案)
完全可行,而且比你现在用的sed注入更安全、更符合Spring生态的配置规范,下面是一步步的实操方案,适合Spring Boot新手:
1. 添加Spring Boot Azure Key Vault依赖
在项目构建文件里加入官方starter,它会帮你自动完成Key Vault的集成工作:
Maven(pom.xml)
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId> <!-- 版本请匹配你的Spring Boot版本,比如Spring Boot 3.x对应5.x系列版本 --> <version>5.12.0</version> </dependency>
Gradle(build.gradle)
implementation 'com.azure.spring:spring-cloud-azure-starter-keyvault-secrets:5.12.0'
2. 配置Key Vault访问与数据库密码引用
删掉application-test.properties里原有的数据库密码配置,替换成以下内容:
# Key Vault基础配置 spring.cloud.azure.keyvault.secret.property-source.enabled=true spring.cloud.azure.keyvault.uri=https://你的KeyVault名称.vault.azure.net/ spring.cloud.azure.keyvault.client-id=${AZURE_CLIENT_ID} spring.cloud.azure.keyvault.client-secret=${AZURE_CLIENT_SECRET} spring.cloud.azure.keyvault.tenant-id=${AZURE_TENANT_ID} # 数据库配置(密码引用Key Vault中的密钥) spring.datasource.url=你的测试数据库URL spring.datasource.username=你的测试数据库用户名 spring.datasource.password=${database-test-password}
说明:
database-test-password是你在Azure Key Vault中存储数据库密码时设置的密钥名称,需要提前在Key Vault里创建该密钥并存入密码${AZURE_CLIENT_ID}等变量不要硬编码,后续通过Azure DevOps Pipeline注入
3. 调整Azure DevOps Pipeline
原来的sed注入步骤可以直接删除,换成以下操作:
- 在Azure DevOps的「库」中创建变量组,或直接在Pipeline里添加变量:
AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID,这些信息来自Azure AD中创建的服务主体(需给该服务主体分配Key Vault的「密钥读取者」权限) - 确保Pipeline在构建/部署阶段将这些变量注入为应用的环境变量,Spring Boot会自动读取并填充配置
4. 配置Key Vault访问权限
在Azure Portal中找到你的Key Vault:
- 进入「访问策略」页面,添加新的访问策略
- 勾选「密钥权限」中的「获取」权限
- 选择之前创建的服务主体作为授权主体
- 保存配置
完成以上步骤后,你的Spring Boot测试环境应用启动时,会自动从Azure Key Vault拉取数据库密码,全程不需要在配置文件中明文存储密码,也无需sed注入操作。
内容的提问来源于stack exchange,提问作者techworm
相关产品推荐
相关产品推荐

