Gestione delle risorse di Spring Cloud di Azure

Questo articolo si applica a: ✔️ Versione 4.14.0 ✔️ versione 5.8.0

Il progetto Spring fornisce un'astrazione Spring Resources per accedere a una serie di risorse di basso livello. Il progetto fornisce interfacce come Resource, ResourceLoader e ResourcePatternResolver. Spring Cloud Azure implementa queste interfacce per i servizi di Archiviazione di Azure, che consente di interagire con BLOB e condivisione file di archiviazione di Azure usando il modello di programmazione Spring. Spring Cloud Azure offre spring-cloud-azure-starter-storage-blob e spring-cloud-azure-starter-storage-file-share per configurare automaticamente Archiviazione di Azure BLOB e Archiviazione di Azure condivisione file.

La tabella seguente elenca Archiviazione di Azure librerie correlate:

Starter Servizio Descrizione
spring-cloud-azure-starter-storage-blob BLOB del servizio di archiviazione di Azure Consente di archiviare e accedere a dati non strutturati su larga scala in BLOB in blocchi.
spring-cloud-azure-starter-storage-file-share Archiviazione di Azure condivisione file Offre condivisioni file cloud completamente gestite a cui è possibile accedere ovunque tramite il protocollo SMB (Server Message Block) standard del settore.

Configurazione delle dipendenze

<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>

La spring-cloud-azure-starter-storage-blob dipendenza è necessaria solo quando si usa Archiviazione di Azure BLOB.

La spring-cloud-azure-starter-storage-file-share dipendenza è necessaria solo quando si usa Archiviazione di Azure condivisione file.

Suggerimento

Forniamo spring-cloud-azure-starter-storage anche per supportare tutte le funzionalità di Archiviazione. Se si sceglie di usarlo, spring.cloud.azure.storage.enable è la proprietà da configurare e il valore predefinito è true. È quindi possibile usare spring.cloud.azure.storage.<storage-service>.enable per disabilitare i servizi non necessario.

Impostazione

Nota

Se si usa un'entità di sicurezza per eseguire l'autenticazione e l'autorizzazione con Microsoft Entra ID per accedere a una risorsa di Azure, assicurarsi che all'entità di sicurezza sia stata concessa l'autorizzazione sufficiente per accedere alla risorsa di Azure. Per altre informazioni, vedere Autorizzare l'accesso con Microsoft Entra ID.

Nella tabella seguente sono elencate le proprietà configurabili di spring-cloud-azure-starter-storage-blob:

Proprietà Predefinito Descrizione
spring.cloud.azure.storage.blob.enabled vero Valore che indica se è abilitato un servizio Archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.endpoint URI da connettere a Archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.account-key Chiave privata da connettere a Archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.account-name Nome dell'account BLOB Archiviazione di Azure.

Nella tabella seguente sono elencate le proprietà configurabili di spring-cloud-azure-starter-storage-file-share:

Proprietà Predefinito Descrizione
spring.cloud.azure.storage.fileshare.enabled vero Valore che indica se il servizio File di Azure Archiviazione è abilitato.
spring.cloud.azure.storage.fileshare.endpoint URI da connettere al Archiviazione file di Azure.
spring.cloud.azure.storage.fileshare.account-key Chiave privata per connettersi al Archiviazione file di Azure.
spring.cloud.azure.storage.fileshare.account-name Nome dell'account di condivisione file Archiviazione di Azure.

Utilizzo di base

Aggiungere le proprietà seguenti al file 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}

Ottenere una risorsa

Ottenere una risorsa con @Value

È possibile usare l'annotazione di @Value("azure-blob://[your-container-name]/[your-blob-name]") per collegare automaticamente una risorsa BLOB, come illustrato nell'esempio seguente:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

È possibile usare l'annotazione di @Value("azure-file://[your-fileshare-name]/[your-file-name]") per collegare automaticamente una risorsa file, come illustrato nell'esempio seguente:

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

Ottenere una risorsa con 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]");

Ottenere le risorse eseguendo una ricerca in base al modello

È possibile usare una classe di implementazione di ResourcePatternResolver per cercare le risorse. Usare AzureStorageBlobProtocolResolver per cercare blob le risorse e AzureStorageFileProtocolResolver per cercare le file risorse.

  • Per la ricerca di criteri, deve searchPattern iniziare con azure-blob:// o azure-file://. Ad esempio, azure-blob://**/** significa elencare tutti i BLOB in tutti i contenitori e azure-blob://demo-container/** significa elencare tutti i BLOB nel demo-container contenitore, inclusa qualsiasi sottocartella.

  • Per la ricerca nel percorso, deve searchLocation iniziare con azure-blob:// o azure-file:// e deve esistere il percorso del file rimanente. In caso contrario, verrà generata un'eccezione.

@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");

Gestione con la risorsa

Scaricare i dati da una risorsa specifica

È possibile scaricare una risorsa da Archiviazione di Azure BLOB o condivisione file con il getInputStream() metodo di 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();

Caricare dati in una risorsa specifica

È possibile caricare in una risorsa nel BLOB di Azure o nell'archiviazione file eseguendo il cast di Spring Resource su WritableResource, come illustrato nell'esempio seguente:

@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());
}

Caricamento in più parti

I file di dimensioni superiori a 4 MiB verranno caricati in Archiviazione di Azure in parallelo.

Esempi

Vedere i repository storage-blob-sample e storage-file-sample in GitHub.