使用 java SDK 在不同区域的 Blob 存储帐户之间同步数据

Posted

技术标签:

【中文标题】使用 java SDK 在不同区域的 Blob 存储帐户之间同步数据【英文标题】:Sync data between Blob storage accounts in the different regions using java SDK 【发布时间】:2021-10-31 13:42:57 【问题描述】:

我有一个要求,需要跨区域(例如在美国中南部区域和美国西部区域之间)同步 Blob 存储帐户中的数据。 azcopy 这是命令行实用程序,可以使用 java SDK 自动执行此过程。

【问题讨论】:

【参考方案1】:

您可以使用 Java SDK 在存储帐户之间复制数据。

如何在存储账户之间复制数据请参考示例代码:

 try 
            BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                    .endpoint("https://<>.blob.core.windows.net/" )
                    .credential(new DefaultAzureCredentialBuilder().build())
                    .buildClient();
            // get User Delegation Key
            OffsetDateTime delegationKeyStartTime = OffsetDateTime.now();
            OffsetDateTime delegationKeyExpiryTime = OffsetDateTime.now().plusDays(7);
            UserDelegationKey key =blobServiceClient.getUserDelegationKey(delegationKeyStartTime,delegationKeyExpiryTime);

            BlobContainerClient sourceContainerClient = blobServiceClient.getBlobContainerClient("test");
            BlobClient sourceBlob = sourceContainerClient.getBlobClient("test.mp3");
            // generate sas token
            OffsetDateTime expiryTime = OffsetDateTime.now().plusDays(1);
            BlobSasPermission permission = new BlobSasPermission().setReadPermission(true);

            BlobServiceSasSignatureValues myValues = new BlobServiceSasSignatureValues(expiryTime, permission)
                    .setStartTime(OffsetDateTime.now());
            String sas =sourceBlob.generateUserDelegationSas(myValues,key);

            // copy
            BlobServiceClient desServiceClient = new BlobServiceClientBuilder()
                    .endpoint("https://<>.blob.core.windows.net/" )
                    .credential(new DefaultAzureCredentialBuilder().build())
                    .buildClient();
            BlobContainerClient desContainerClient = blobServiceClient.getBlobContainerClient("test");
            String res =desContainerClient.getBlobClient("test.mp3")
                    .copyFromUrl(sourceBlob.getBlobUrl()+"?"+sas);
            System.out.println(res);
         catch (Exception e) 
            e.printStackTrace();
        

此外,您可以使用 azcopy 在存储帐户之间同步数据,并且可以自动执行此过程,创建 bat 文件并将 bat 文件作为 cron 作业或任务计划程序运行

参考

Copy Blob in Azure Blob Storage using Java v12 SDK

【讨论】:

以上是关于使用 java SDK 在不同区域的 Blob 存储帐户之间同步数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Azure Java SDK V12 和 ListBlobs() 在 Azure Blobstorage 中列出 Blob 非常慢

如何使用 Java SDK v12 删除 Blob 文件夹

java 读取blob类型存成.doc操作!!

使用 java SDK 将标签添加到 blob

未从 blob 上的 azure java sdk 收到元数据字段

在 Java SDK 中模拟 Azure 存储 Blob