Spring Cloud Azure5.13.0

什麼是 Spring Cloud Azure?

Spring Cloud Azure 是一個開放原始碼專案,旨在將您的 Spring 應用程式與 Azure 服務整合,使用 Spring 應用程式開發的原生慣用表達式和組態。儘管名稱相似,Spring Cloud Azure 與 Azure Spring Apps 不同,後者是專為在 Azure 上執行 Spring 應用程式而設計的 Web 託管平台。

Spring Cloud Azure 的用途?

Spring Cloud Azure 可以更輕鬆地在 Spring 應用程式中完成以下任務

下圖概述了這些功能: Spring Cloud azure

使用 Spring Cloud Azure 的優點

以下章節示範了使用 Spring Cloud Azure 的優點。本節以擷取儲存在 Azure Key Vault 中的秘密為例。本節比較了在有無 Spring Cloud Azure 的情況下開發 Spring Boot 應用程式之間的差異。

沒有 Spring Cloud Azure

如果沒有 Spring Cloud Azure,而您想要擷取儲存在 Azure Key Vault 中的秘密,則需要執行以下步驟

  1. 將以下相依性新增至您的 pom.xml 檔案

    <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-security-keyvault-secrets</artifactId>
       <version>4.5.2</version>
    </dependency>
    
  2. 使用類似於以下範例的程式碼建構 SecretClient 類別執行個體

    public 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();
        }
    }
    
  3. 避免硬式編碼 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;
        }
    }
    
  4. 更新您的應用程式程式碼,如此範例所示

    @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());
        }
    }
    
  5. 將必要的屬性新增至您的 application.yml 檔案,如此範例所示

    azure:
      keyvault:
        vault-url:
        tenant-id:
        client-id:
        client-secret:
    
  6. 如果您需要在多個地方使用 SecretClient,請定義 SecretClient bean。然後,在相關位置自動裝配 SecretClient

使用 Spring Cloud Azure

如果使用 Spring Cloud Azure,而您想要擷取儲存在 Azure Key Vault 中的秘密,則需求更為簡潔,如下列步驟所示

  1. 將以下相依性新增至您的 pom.xml 檔案

    <dependencies>
      <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
      </dependency>
    </dependencies>
    
  2. 使用物料清單 (BOM) 來管理 Spring Cloud Azure 版本,如下列範例所示

    <dependencyManagement>
     <dependencies>
       <dependency>
         <groupId>com.azure.spring</groupId>
         <artifactId>spring-cloud-azure-dependencies</artifactId>
         <version>4.19.0</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>
     </dependencies>
    </dependencyManagement>
    
  3. 將以下屬性新增至您的 application.yml 檔案

    spring:
      cloud:
        azure:
          keyvault:
            secret:
              endpoint:
    
  4. 使用下列命令透過 Azure CLI 登入。您的認證將由 Azure CLI 提供,因此無需新增其他認證資訊,例如 client-idclient-secret

    az login
    
  5. 在相關位置自動裝配 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());
        }
    }
    

除了自動組態的 SecretClient 之外,Spring Cloud Azure 還會提供其他一些功能。例如,您可以使用 @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 服務 (例如 Service Bus、Storage、Active Directory 等) 的自動組態支援。

Azure Active Directory

提供 Spring Security 與 Azure Active Directory 整合以進行驗證的支援。如需詳細資訊,請參閱《Spring Cloud Azure 開發人員指南》的「Spring Security 支援」章節。

Azure Key Vault

提供 Spring @Value 註釋支援,以與 Azure Key Vault Secrets 整合。如需詳細資訊,請參閱《Spring Cloud Azure 開發人員指南》的「秘密管理」章節。

Azure Storage

提供 Spring Boot 對 Azure Storage 服務的支援。如需詳細資訊,請參閱《Spring Cloud Azure 開發人員指南》的「資源處理」章節。

資源

取得支援

如果您需要 Spring Cloud Azure 的支援,可以透過以下方式尋求協助

Spring Initializr

快速開始您的專案

搶先一步

VMware 提供訓練和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部