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 conazure-blob://
oazure-file://
. Ad esempio,azure-blob://**/**
significa elencare tutti i BLOB in tutti i contenitori eazure-blob://demo-container/**
significa elencare tutti i BLOB nel contenitoredemo-container
, inclusa qualsiasi sottocartella.Per la ricerca della posizione, il
searchLocation
deve iniziare conazure-blob://
oazure-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.