Tratamento de recursos do Spring Cloud Azure

Este artigo aplica-se a: ✔️ Versão 4.14.0 Versão 5.8.0 ✔️

O projeto Spring fornece uma abstração de Spring Resources 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 configura automaticamente o Blob de Armazenamento do Azure e spring-cloud-azure-starter-storage-file-share o Compartilhamento de Arquivos de Armazenamento do Azure.

A tabela a seguir lista as bibliotecas relacionadas ao Armazenamento do Azure:

Inicial Serviço Description
spring-cloud-azure-starter-storage-blob Azure Storage Blob 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 spring-cloud-azure-starter-storage-blob dependência só é necessária quando você estiver usando o Blob de Armazenamento do Azure.

A spring-cloud-azure-starter-storage-file-share dependência só é necessária quando você estiver usando o Compartilhamento de Arquivos de Armazenamento do Azure.

Gorjeta

Nós também fornecemos spring-cloud-azure-starter-storage suporte a 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

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, certifique-se de que 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:

Property Predefinição Description
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.nome-da-conta 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:

Property Predefinição Description
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.nome-da-conta 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 para autoconectar um recurso de @Value("azure-blob://[your-container-name]/[your-blob-name]") 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 para autowire um recurso de @Value("azure-file://[your-fileshare-name]/[your-file-name]") 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 e AzureStorageFileProtocolResolver para pesquisar fileblob recursos.

  • Para a pesquisa de padrões, o searchPattern deve começar com azure-blob:// ou azure-file://. Por exemplo, significa listar todos os blobs em todos os contêineres e azure-blob://demo-container/** significa listar todos os demo-container blobs no contêiner, azure-blob://**/** incluindo qualquer subpasta.

  • Para a pesquisa de localização, o deve começar com azure-blob:// ou azure-file:// e o searchLocation 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 getInputStream() método .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.

Exemplos

Consulte os repositórios storage-blob-sample e storage-file-sample no GitHub.