Spring Cloud Azure
什么是 Spring Cloud Azure?
Spring Cloud Azure 是一个开源项目,利用 Spring 应用开发中原生的传统表达式和配置,实现 Spring 应用与 Azure 服务之间的集成。
Spring Cloud Azure 是用来做什么的?
Spring Cloud Azure 可以帮助更容易完成 Spring 应用中的以下任务:
- 使用 Azure 应用配置管理配置属性。
- 通过 Azure Event Hubs、Azure Service Bus 和 Azure Storage Queue 发送和接收消息。
- 使用 Azure Key Vault 管理秘密和证书。
- 支持用户通过 Azure Active Directory 配置的工作或学校账户登录。
- 支持用户通过 Facebook 和 Google 社交账号登录,支持 Azure Active Directory B2C。
- 保护您的Web API,并访问如Microsoft Graph等受保护API,以通过Azure Active Directory和Azure Active Directory B2C处理用户和组织的数据。
- 使用 Azure Cosmos DB 存储结构化数据。
- 使用 Azure Blob 存储存储非结构化数据,如文本或二进制数据。
- 用 Azure 文件存储文件。
下图概述了这些特性:
使用 Spring Cloud Azure 的优势
以下部分将演示使用 Spring Cloud Azure 的优势。本节以检索存储在 Azure 密钥库中的秘密为例。本节比较了有 Spring Cloud Azure 与未使用 Spring Cloud Azure 开发 Spring Boot 应用的区别。
Without Spring Cloud Azure
没有 Spring Cloud Azure,如果你想检索存储在 Azure Key Vault 中的秘密,你需要采取以下步骤:
-
将以下依赖添加到你的pom.xml文件中:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-security-keyvault-secrets</artifactId> <version>4.5.2</version> </dependency> -
通过使用类似以下示例的代码构建一个类实例:
SecretClientpublic class DemoClass { public static void main(String... args) { SecretClient client = new SecretClientBuilder() .vaultUrl("vaultUrl") .credential(new ClientSecretCredentialBuilder() .tenantId("tenantId") .clientId("clientId") .clientSecret("clientSecret") .build()) .buildClient(); } } -
通过使这些属性可配置,避免硬编码信息,如下示例所示:
client-idclient-secret@ConfigurationProperties("azure.keyvault") public class KeyVaultProperties { private String vaultUrl; private String tenantId; private String clientId; private String clientSecret; public KeyVaultProperties(String vaultUrl, String tenantId, String clientId, String clientSecret) { this.vaultUrl = vaultUrl; this.tenantId = tenantId; this.clientId = clientId; this.clientSecret = clientSecret; } public String getVaultUrl() { return vaultUrl; } public void setVaultUrl(String vaultUrl) { this.vaultUrl = vaultUrl; } public String getTenantId() { return tenantId; } public void setTenantId(String tenantId) { this.tenantId = tenantId; } public String getClientId() { return clientId; } public void setClientId(String clientId) { this.clientId = clientId; } public String getClientSecret() { return clientSecret; } public void setClientSecret(String clientSecret) { this.clientSecret = clientSecret; } } -
如示例所示,更新您的应用代码:
@SpringBootApplication @EnableConfigurationProperties(KeyVaultProperties.class) public class SecretClientApplication implements CommandLineRunner { private KeyVaultProperties properties; public SecretClientApplication(KeyVaultProperties properties) { this.properties = properties; } public static void main(String[] args) { SpringApplication.run(SecretClientApplication.class, args); } @Override public void run(String... args) { SecretClient client = new SecretClientBuilder() .vaultUrl(properties.getVaultUrl()) .credential(new ClientSecretCredentialBuilder() .tenantId(properties.getTenantId()) .clientId(properties.getClientId()) .clientSecret(properties.getClientSecret()) .build()) .buildClient(); System.out.println("sampleProperty: " + client.getSecret("sampleProperty").getValue()); } } -
将必要的属性添加到你的application.yml文件中,如下示例所示:
azure: keyvault: vault-url: tenant-id: client-id: client-secret: -
如果需要在多个地方使用,就定义一下豆子。然后,在相关位置自动接线。
SecretClientSecretClientSecretClient
With Spring Cloud Azure
使用 Spring Cloud Azure,如果您想检索存储在 Azure Key Vault 中的秘密,要求更简单,具体步骤如下:
-
将以下依赖添加到你的pom.xml文件中:
<dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId> </dependency> </dependencies> -
使用物料清单(BOM)来管理 Spring Cloud Azure 版本,如下示例所示:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.18.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> -
将以下属性添加到您的application.yml文件中:
spring: cloud: azure: keyvault: secret: endpoint: -
使用以下命令使用 Azure CLI 登录。你的凭证将由Azure CLI提供,因此无需添加其他凭证信息,如和。
client-idclient-secretaz login -
在相关位置自动接线,如下示例所示:
SecretClient@SpringBootApplication public class SecretClientApplication implements CommandLineRunner { private final SecretClient secretClient; public SecretClientApplication(SecretClient secretClient) { this.secretClient = secretClient; } public static void main(String[] args) { SpringApplication.run(SecretClientApplication.class, args); } @Override public void run(String... args) { System.out.println("sampleProperty: " + secretClient.getSecret("sampleProperty").getValue()); } }
Spring Cloud Azure 除了自动配置功能外,还会提供一些其他功能。例如,你可以用 来获得秘密值,如下示例所示:SecretClient@Value
@SpringBootApplication
public class PropertySourceApplication implements CommandLineRunner {
@Value("${sampleProperty1}")
private String sampleProperty1;
public static void main(String[] args) {
SpringApplication.run(PropertySourceApplication.class, args);
}
public void run(String[] args) {
System.out.println("sampleProperty1: " + sampleProperty1);
}
}
Spring Cloud Azure 的组件
Azure 支持
为Azure服务(如服务总线、存储、Active Directory等)提供自动配置支持。
Azure Active Directory
提供与 Azure Active Directory 的 Spring Security 集成支持以实现身份验证。欲了解更多信息,请参阅 Spring Cloud Azure 开发者指南中的 Spring 安全支持部分。
Azure Key Vault
提供 Spring 注释支持,支持与 Azure Key Vault Secrets 集成。更多信息请参见 Spring Cloud Azure 开发者指南中的秘密管理部分。@Value
Azure Storage
为 Azure 存储服务提供 Spring Boot 支持。更多信息请参见 Spring Cloud Azure 开发者指南中的资源处理部分。
资源:
- Source code: Azure/azure-sdk-for-java
- Samples: Azure-Samples/azure-spring-boot-samples
- Documentation: Spring Cloud Azure
寻求支持
如果你需要支持 Spring Cloud Azure,可以通过以下方式寻求帮助:
- 创建 Azure 支持工单。拥有Azure支持计划的客户可以开启Azure支持工单。如果您的问题需要立即处理,我们推荐此选项。
- 在 Azure/azure-sdk-for-java 仓库中文件 GitHub issues。我们使用 GitHub issue 来跟踪漏洞、问题和功能请求。GitHub issues是免费的,但响应时间不保证。更多信息请参见GitHub Issues支持流程。
文档
每个Spring项目都有自己的项目;它非常详细地解释了如何使用项目特性以及使用它们可以实现什么。
入门指南
教程
简单示例: