Manipulação de recursos do Spring Cloud Azure
Este artigo se aplica a:✅ versão 4.19.0 ✅ versão 5.19.0
O projeto Spring fornece uma abstração Spring Resources para acessar vários recursos de baixo nível. O projeto fornece interfaces como Resource
, ResourceLoader
e ResourcePatternResolver
. O Spring Cloud Azure implementa essas interfaces para os serviços de Armazenamento do Azure, o que permite interagir com o Blob de Armazenamento do Azure e o Compartilhamento de Arquivos usando o modelo de programação spring. O Spring Cloud Azure fornece spring-cloud-azure-starter-storage-blob
e spring-cloud-azure-starter-storage-file-share
para configurar automaticamente o Blob de Armazenamento do Azure e o Compartilhamento de Arquivos de Armazenamento do Azure.
A tabela a seguir lista as bibliotecas relacionadas ao Armazenamento do Azure:
Starter | Serviço | Descrição |
---|---|---|
spring-cloud-azure-starter-storage-blob | Blob de Armazenamento do Azure | Permite que dados não estruturados sejam armazenados e acessados em grande escala em blobs de blocos. |
spring-cloud-azure-starter-storage-file-share | Compartilhamento de Arquivos de Armazenamento do Azure | Oferece compartilhamentos de arquivos de nuvem totalmente gerenciados que você pode acessar de qualquer lugar por meio do protocolo SMB (Bloco de Mensagens do Servidor) padrão do setor. |
Configuração de dependência
<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>
A dependência spring-cloud-azure-starter-storage-blob
só é necessária quando você está usando o Blob de Armazenamento do Azure.
A dependência spring-cloud-azure-starter-storage-file-share
só é necessária quando você está usando o Compartilhamento de Arquivos de Armazenamento do Azure.
Ponta
Também fornecemos spring-cloud-azure-starter-storage
para dar suporte a todos os recursos do Armazenamento. Se você optar por usá-lo, spring.cloud.azure.storage.enable
será a propriedade a ser configurada e o valor padrão será verdadeiro. Em seguida, você pode usar spring.cloud.azure.storage.<storage-service>.enable
para desabilitar serviços desnecessários.
Configuração
Nota
Se você usar uma entidade de segurança para autenticar e autorizar com a ID do Microsoft Entra para acessar um recurso do Azure, verifique se a entidade de segurança recebeu permissão suficiente para acessar o recurso do Azure. Para obter mais informações, consulte Autorizar o acesso com o Microsoft Entra ID.
A tabela a seguir lista as propriedades configuráveis de spring-cloud-azure-starter-storage-blob
:
Propriedade | Inadimplência | Descrição |
---|---|---|
spring.cloud.azure.storage.blob.enabled | verdadeiro | Um valor que indica se um serviço de Armazenamento de Blobs do Azure está habilitado. |
spring.cloud.azure.storage.blob.endpoint | O URI a ser conectado ao Armazenamento de Blobs do Azure. | |
spring.cloud.azure.storage.blob.account-key | A chave privada a ser conectada ao Armazenamento de Blobs do Azure. | |
spring.cloud.azure.storage.blob.account-name | O nome da conta de Blob do Armazenamento do Azure. |
A tabela a seguir lista as propriedades configuráveis de spring-cloud-azure-starter-storage-file-share
:
Propriedade | Inadimplência | Descrição |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | verdadeiro | Um valor que indica se o serviço de Armazenamento de Arquivos do Azure está habilitado. |
spring.cloud.azure.storage.fileshare.endpoint | O URI a ser conectado ao Armazenamento de Arquivos do Azure. | |
spring.cloud.azure.storage.fileshare.account-key | A chave privada a ser conectada ao Armazenamento de Arquivos do Azure. | |
spring.cloud.azure.storage.fileshare.account-name | O nome da conta do Compartilhamento de Arquivos do Armazenamento do Azure. |
Uso básico
Adicione as seguintes propriedades ao arquivo 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}
Obter um recurso
Obter um recurso com @Value
Você pode usar a anotação de @Value("azure-blob://[your-container-name]/[your-blob-name]")
para autofiar um recurso de blob, conforme mostrado no exemplo a seguir:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
Você pode usar a anotação de @Value("azure-file://[your-fileshare-name]/[your-file-name]")
para ligar automaticamente um recurso de arquivo, conforme mostrado no exemplo a seguir:
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
Obter um recurso com o 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]");
Obter recursos pesquisando o padrão
Você pode usar uma classe de implementação de ResourcePatternResolver
para pesquisar recursos. Use AzureStorageBlobProtocolResolver
para pesquisar blob
recursos e AzureStorageFileProtocolResolver
para pesquisar recursos file
.
Para pesquisa de padrões, o
searchPattern
deve começar comazure-blob://
ouazure-file://
. Por exemplo,azure-blob://**/**
significa listar todos os blobs em todos os contêineres eazure-blob://demo-container/**
significa listar todos os blobs no contêinerdemo-container
, incluindo qualquer subpasta.Para a pesquisa de local, o
searchLocation
deve começar comazure-blob://
ouazure-file://
e o caminho de arquivo restante deve existir, caso contrário, uma exceção será gerada.
@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");
Manipulando com o recurso
Baixar dados de um recurso específico
Você pode baixar um recurso do Blob de Armazenamento do Azure ou do Compartilhamento de Arquivos com o método getInputStream()
de Resource
.
@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();
Carregar dados em um recurso específico
Você pode carregar em um recurso para o Blob do Azure ou armazenamento de arquivos, convertendo o Spring Resource
em WritableResource
, conforme mostrado no exemplo a seguir:
@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());
}
Upload de várias partes
Arquivos maiores que 4 MiB serão carregados no Armazenamento do Azure em paralelo.
Amostras
Consulte os de exemplo de