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. |
<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.
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. |
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}
È 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;
@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]");
È 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 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 neldemo-container
contenitore, inclusa qualsiasi sottocartella.Per la ricerca nel percorso, deve
searchLocation
iniziare conazure-blob://
oazure-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");
È 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();
È 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());
}
I file di dimensioni superiori a 4 MiB verranno caricati in Archiviazione di Azure in parallelo.
Vedere i repository storage-blob-sample e storage-file-sample in GitHub.