使用 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 非常慢