Spring Cloud Azure 资源处理
本文 适用于:✅ 版本 4.19.0 ✅ 版本 5.19.0
Spring 项目提供了一个 Spring Resources 抽象来访问许多低级别资源。 该项目提供 Resource
、ResourceLoader
和 ResourcePatternResolver
等接口。 Spring Cloud Azure 为 Azure 存储服务实现这些接口,使你能够使用 Spring 编程模型与 Azure 存储 Blob 和文件共享进行交互。 Spring Cloud Azure 提供 spring-cloud-azure-starter-storage-blob
和 spring-cloud-azure-starter-storage-file-share
来自动配置 Azure 存储 Blob 和 Azure 存储文件共享。
下表列出了 Azure 存储相关库:
起动机 | 服务 | 描述 |
---|---|---|
spring-cloud-azure-starter-storage-blob | Azure 存储 Blob | 允许在块 Blob 中大规模存储和访问非结构化数据。 |
spring-cloud-azure-starter-storage-file-share | Azure 存储文件共享 | 提供完全托管的云文件共享,可通过行业标准服务器消息块 (SMB) 协议从任何位置进行访问。 |
依赖项设置
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
</dependency>
</dependencies>
仅当使用 Azure 存储 Blob 时,才需要 spring-cloud-azure-starter-storage-blob
依赖项。
仅当使用 Azure 存储文件共享时,才需要 spring-cloud-azure-starter-storage-file-share
依赖项。
提示
我们还提供 spring-cloud-azure-starter-storage
来支持存储的所有功能。 如果选择使用它,spring.cloud.azure.storage.enable
是要配置的属性,默认值是 true
。 然后,可以使用 spring.cloud.azure.storage.<storage-service>.enable
禁用不需要的服务。
配置
注意
如果使用安全主体通过 Microsoft Entra ID 进行身份验证和授权来访问 Azure 资源,请确保安全主体已获得足够的权限来访问 Azure 资源。 有关详细信息,请参阅 使用 Microsoft Entra ID授权访问。
下表列出了 spring-cloud-azure-starter-storage-blob
的可配置属性:
财产 | 违约 | 描述 |
---|---|---|
spring.cloud.azure.storage.blob.enabled | 真 | 一个值,该值指示是否启用了 Azure Blob 存储服务。 |
spring.cloud.azure.storage.blob.endpoint | 要连接到 Azure Blob 存储的 URI。 | |
spring.cloud.azure.storage.blob.account-key | 用于连接到 Azure Blob 存储的私钥。 | |
spring.cloud.azure.storage.blob.account-name | Azure 存储帐户名称。 |
下表列出了 spring-cloud-azure-starter-storage-file-share
的可配置属性:
财产 | 违约 | 描述 |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | 真 | 一个值,该值指示是否启用了 Azure 文件存储服务。 |
spring.cloud.azure.storage.fileshare.endpoint | 要连接到 Azure 文件存储的 URI。 | |
spring.cloud.azure.storage.fileshare.account-key | 要连接到 Azure 文件存储的私钥。 | |
spring.cloud.azure.storage.fileshare.account-name | Azure 存储文件共享帐户名称。 |
基本用法
将以下属性添加到 application.yml 文件:
spring:
cloud:
azure:
storage:
blob:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_BLOB_ENDPOINT}
fileshare:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_FILESHARE_ENDPOINT}
获取资源
使用 @Value 获取资源
可以使用 @Value("azure-blob://[your-container-name]/[your-blob-name]")
的注释自动连接 blob 资源,如以下示例所示:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
可以使用 @Value("azure-file://[your-fileshare-name]/[your-file-name]")
的注释自动连接文件资源,如以下示例所示:
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
使用 ResourceLoader 获取资源
@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");
// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");
通过搜索模式获取资源
可以使用 ResourcePatternResolver
的实现类来搜索资源。 使用 AzureStorageBlobProtocolResolver
搜索 blob
资源和 AzureStorageFileProtocolResolver
来搜索 file
资源。
对于模式搜索,
searchPattern
应以azure-blob://
或azure-file://
开头。 例如,azure-blob://**/**
表示列出所有容器中的所有 blob,azure-blob://demo-container/**
意味着列出demo-container
容器中的所有 blob,包括任何子文件夹。对于位置搜索,
searchLocation
应以azure-blob://
或azure-file://
开头,其余文件路径应存在,否则将引发异常。
@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;
@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;
// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");
// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");
使用资源进行处理
从特定资源下载数据
可以使用 getInputStream()
Resource
方法从 Azure 存储 Blob 或文件共享下载资源。
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
//...
// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();
// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();
将数据上传到特定资源
可以通过将 Spring Resource
强制转换为 WritableResource
,将资源上传到 Azure Blob 或文件存储,如以下示例所示:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
String data = "sampledata";
// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
blobos.write(data.getBytes());
}
// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
fileos.write(data.getBytes());
}
多部分上传
大于 4 MiB 的文件将并行上传到 Azure 存储。
样品
请参阅 GitHub 上的 storage-blob-sample 和 storage-file-sample 存储库。