Tratamento de recursos do Spring Cloud Azure
Este artigo aplica-se a:✅ Versão 4.19.0 ✅ Versão 5.19.0
O projeto Spring fornece uma Spring Resources abstração para acessar uma série de 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 que você interaja 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:
Arranque | 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 bloco. |
spring-cloud-azure-starter-storage-file-share | Compartilhamento de arquivos de armazenamento do Azure | Oferece compartilhamentos de arquivos na nuvem totalmente gerenciados que você pode acessar de qualquer lugar por meio do protocolo SMB (Server Message Block) 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ê estiver usando o Blob de Armazenamento do Azure.
A dependência spring-cloud-azure-starter-storage-file-share
só é necessária quando você estiver usando o Compartilhamento de Arquivos de Armazenamento do Azure.
Dica
Também fornecemos spring-cloud-azure-starter-storage
para suportar todos os recursos de armazenamento. Se você optar por usá-lo, spring.cloud.azure.storage.enable
é a propriedade a ser configurada e o valor padrão é true. Em seguida, você pode usar spring.cloud.azure.storage.<storage-service>.enable
para desativar serviços desnecessários.
Configuração
Observação
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 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 Blob do Azure está habilitado. |
spring.cloud.azure.storage.blob.endpoint | O URI para se conectar ao Armazenamento de Blobs do Azure. | |
spring.cloud.azure.storage.blob.account-key | A chave privada para se conectar ao Armazenamento de Blobs do Azure. | |
spring.cloud.azure.storage.blob.account-name | O nome da conta do Blob de 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 para se conectar ao Armazenamento de Arquivos do Azure. | |
spring.cloud.azure.storage.fileshare.account-key | A chave privada para se conectar ao Armazenamento de Arquivos do Azure. | |
spring.cloud.azure.storage.fileshare.account-name | O nome da conta do Compartilhamento de Arquivos de Armazenamento do Azure. |
Utilização básica
Adicione as seguintes propriedades ao seu 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
Obtenha um recurso com @Value
Você pode usar a anotação de @Value("azure-blob://[your-container-name]/[your-blob-name]")
para autoconectar 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 autowire 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 padrão
Você pode usar uma classe de implementação de ResourcePatternResolver
para pesquisar recursos. Use AzureStorageBlobProtocolResolver
para pesquisar recursos blob
e AzureStorageFileProtocolResolver
pesquisar recursos file
.
Para a 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 pesquisa de localização, o
searchLocation
deve começar comazure-blob://
ouazure-file://
e o caminho do arquivo restante deve existir, caso contrário, uma exceção será lançada.
@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");
Manipulação com recursos
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 para um recurso específico
Você pode carregar para um recurso no Blob do Azure ou no armazenamento de arquivos transmitindo o Spring Resource
para 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());
}
Carregamento de várias partes
Os ficheiros com mais de 4 MiB serão carregados para o Armazenamento do Azure em paralelo.
Amostras
Consulte o de