Condividi tramite


Gestione delle risorse di Spring Cloud di Azure

Questo articolo si applica a:✅ versione 4.19.0 ✅ versione 5.19.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 BLOB di Archiviazione di Azure e condivisione file di Archiviazione di Azure.

La tabella seguente elenca le librerie correlate ad Archiviazione di Azure:

Avviatore Servizio Descrizione
spring-cloud-azure-starter-storage-blob BLOB 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 Condivisione file di Archiviazione di Azure 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 dipendenza spring-cloud-azure-starter-storage-blob è necessaria solo quando si usa IL BLOB di Archiviazione di Azure.

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

Mancia

Forniamo anche spring-cloud-azure-starter-storage 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.

Configurazione

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à Default Descrizione
spring.cloud.azure.storage.blobabilitato vero Valore che indica se è abilitato un servizio di archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.endpoint URI da connettere ad Archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.account-key Chiave privata per connettersi all'archiviazione BLOB di Azure.
spring.cloud.azure.storage.blob.account-name Nome dell'account BLOB di Archiviazione di Azure.

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

Proprietà Default Descrizione
spring.cloud.azure.storage.fileshare.enabled vero Valore che indica se il servizio Archiviazione file di Azure è abilitato.
spring.cloud.azure.storage.fileshareendpoint URI da connettere ad Archiviazione file di Azure.
spring.cloud.azure.storage.fileshare.account-key Chiave privata per connettersi ad Archiviazione file di Azure.
spring.cloud.azure.storage.fileshare.account-name Nome dell'account condivisione file di 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 risorse e AzureStorageFileProtocolResolver per cercare file risorse.

  • Per la ricerca di criteri, il searchPattern deve 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 contenitore demo-container, inclusa qualsiasi sottocartella.

  • Per la ricerca della posizione, il searchLocation deve iniziare con azure-blob:// o azure-file:// e il percorso del file rimanente deve esistere; 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 dal BLOB o dalla condivisione file di Archiviazione di Azure con il metodo getInputStream() 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 in 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.

Campioni

Vedere l' storage-blob-sample e repository storage-file-sample in GitHub.