使用 Java 建立和管理容器租用

本文會說明如何使用適用於 Java 的 Azure 儲存體用戶端程式庫來建立和管理容器租用。 您可以使用用戶端程式庫來取得、更新、發行和中斷容器租用。

必要條件

設定您的環境

如果沒有現有的專案,本章節會說明如何設定專案以使用適用於 JAVA 的 Azure Blob 儲存體用戶端程式庫。 如需詳細資訊,請參閱開始使用 Azure Blob 儲存體和 JAVA (部分機器翻譯)。

若要使用本文中的程式碼範例,請遵循下列步驟來設定您的專案。

注意

本文使用 Maven 建置工具來建置和執行範例程式碼。 Gradle 等其他建置工具也能與適用於 Java 的 Azure SDK 搭配運作。

安裝套件

在文字編輯器中開啟 pom.xml 檔案。 包含 BOM 檔案或包含直接相依性以安裝套件。

新增 import 陳述式

加入下列 import 陳述式:

import com.azure.storage.blob.*;
import com.azure.storage.blob.specialized.*;

授權

授權機制必須具有使用容器租用所需的權限。 如需使用 Microsoft Entra ID 授權 (建議使用),您需要 Azure RBAC 內建角色儲存體 Blob 資料參與者或更高權限。 若要深入了解,請參閱租用容器 (REST API) (部分機器翻譯) 的授權指導。

建立用戶端物件

若要將應用程式連線至 Blob 儲存體,請建立 BlobServiceClient類別的執行個體。

下列範例會使用 BlobServiceClientBuilder,使用 BlobServiceClient 建置 DefaultAzureCredential 物件,並視需要示範如何建立容器和 Blob 用戶端:

// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("<container-name>");

// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
        .getBlobClient("<blob-name>");

若要深入了解如何建立及管理用戶端物件,請參閱建立和管理與資料資源互動的用戶端端物件 (部分機器翻譯)。

關於容器租用

租用會在容器上建立及管理刪除作業的鎖定。 鎖定持續時間的範圍是 15 到 60 秒,也可以設為無限。 容器上的租用會提供刪除容器的專有存取權。 容器租用只會控制使用刪除容器 REST API 作業來刪除容器的功能。 若要刪除具有作用中租用的容器,用戶端必須使用刪除要求納入作用中的租用識別碼。 在未包含租用識別碼的情況下,所有其他容器作業都可以在租用的容器上成功執行。 如果您已啟用容器虛刪除,則可以還原已刪除的容器。

若要深入了解租用狀態,以及何時可以在租用上執行指定動作,請參閱租用狀態和動作。

租用作業是由 BlobLeaseClient 類別處理,其提供一個包含 Blob 和容器的所有租用作業的用戶端。 若要深入了解使用用戶端程式庫的 Blob 租用,請參閱使用 Java 建立和管理 Blob 租用。

取得租用

取得容器租用時,會取得一個租用識別碼,讓您的程式碼可用來在容器上運作。 如果容器已經有作用中的租用,您只能使用作用中的租用識別碼來要求新的租用。 不過,您可以指定新的租用期間。

若要取得租用,請建立 BlobLeaseClient 類別的執行個體,然後使用下列方法:

下列範例會取得容器的 30 秒租用:

public BlobLeaseClient acquireContainerLease(BlobContainerClient container) {
    // Create the lease client
    BlobLeaseClient leaseClient = new BlobLeaseClientBuilder()
            .containerClient(container)
            .buildClient();

    // Acquire the lease - specify duration between 15 and 60 seconds, or -1 for
    // infinite duration
    String leaseID = leaseClient.acquireLease(30);
    System.out.printf("Acquired lease ID: %s%n", leaseID);

    return leaseClient;
}

更新租用

如果在要求上指定的租用識別碼符合該容器相關聯的租用識別碼,則可以更新容器租用。 租用到期之後,只要容器未曾再度租用,即使租用已到期,還是可以更新。 當您更新租用時,租用期間會重設。

若要更新現有的租用,請使用下列方法:

下列範例會更新容器的租用:

public void renewContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.renewLease();
}

釋放租用

如果在要求上指定的租用識別碼符合該容器相關聯的租用識別碼,則可以發行容器租用。 釋放租用,可讓其他用戶端在釋放完成後立即取得容器的租用。

您可以使用下列方法來釋放租用:

下列範例會釋放容器的租用:

public void releaseContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.releaseLease();
    System.out.println("Release lease operation completed");
}

中斷租用

如果容器具有作用中的租用,您可以中斷容器租用。 任何已授權的要求都可以中斷租用;此要求不需要指定相符的租用識別碼。 租用在中斷之後會無法更新,而且中斷租用之後的一段期間内將無法取得新租用,直到原始租用到期或釋放爲止。

您可以使用下列方法來中斷租用:

下列範例會中斷容器的租用:

public void breakContainerLease(BlobLeaseClient leaseClient) {
    leaseClient.breakLease();
}

租用狀態和動作

下圖會顯示租用的五個狀態,以及會導致租用狀態變更的命令或事件。

顯示容器租用狀態和狀態變更觸發程序的圖表。

下表會列出五個租用狀態、提供每個租用狀態的簡短描述,並列出指定狀態中允許的租用動作。 這些租用動作會導致狀態轉換,如下圖所示。

租用狀態 描述 允許的租用動作
可用的 租用已解除鎖定,並且可以取得。 acquire
已租用 租用已鎖定。 acquire (僅限相同的租用識別碼)、renew、change、release 和 break
已到期 租用期間到期。 acquire、renew、release 和 break
正在中斷 租用已中斷,但租用將繼續鎖定,直到中斷期間到期為止。 release 和 break
中斷 租用已中斷,且中斷期間已到期。 acquire、release 和 break

在租用到期後,租用識別碼會由 Blob 服務維護,直到容器修改或再度租用。 用戶端可能會嘗試使用過期的租用識別碼來更新或發行租用。 如果要求失敗,用戶端會知道容器已再次租用,或自租用上次作用之後已刪除容器。

如果租用到期,而不是明確地發行,用戶端可能需要稍候一分鐘,才能為容器取得新的租用。 不過,用戶端可以立即以到期的租用識別碼更新租用。

資源

若要深入了解如何使用適用於 Java 的 Azure Blob 儲存體用戶端程式庫租用容器,請參閱下列資源。

程式碼範例

REST API 操作

適用於 JAVA 的 Azure SDK 包含建置在 Azure REST API 上的程式庫,可讓您透過熟悉的 JAVA 範例與 REST API 作業進行互動。 用來租用容器的用戶端程式庫方法會使用下列 REST API 作業:

用戶端程式庫資源

另請參閱

  • 本文是適用於 JAVA 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 JAVA 應用程式 (部分機器翻譯) 的開發人員指南文章完整清單。