Partager via


Gestion des ressources Spring Cloud Azure

Cet article s’applique à :✅ version 4.19.0 ✅ version 5.19.0

Le projet Spring fournit une abstraction Spring Resources pour accéder à un certain nombre de ressources de bas niveau. Le projet fournit des interfaces telles que Resource, ResourceLoader et ResourcePatternResolver. Spring Cloud Azure implémente ces interfaces pour les services stockage Azure, ce qui vous permet d’interagir avec les objets blob de stockage Azure et le partage de fichiers à l’aide du modèle de programmation Spring. Spring Cloud Azure fournit des spring-cloud-azure-starter-storage-blob et des spring-cloud-azure-starter-storage-file-share pour configurer automatiquement le stockage Blob Azure et le partage de fichiers stockage Azure.

Le tableau suivant répertorie les bibliothèques associées au Stockage Azure :

Démarreur Service Description
spring-cloud-azure-starter-storage-blob Blob stockage Azure Permet aux données non structurées d’être stockées et accessibles à une échelle massive dans les objets blob de blocs.
spring-cloud-azure-starter-storage-file-share Partage de fichiers stockage Azure Offre des partages de fichiers cloud entièrement managés auxquels vous pouvez accéder n’importe où via le protocole SMB (Server Message Block) standard du secteur.

Configuration des dépendances

<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 dépendance spring-cloud-azure-starter-storage-blob est requise uniquement lorsque vous utilisez l’objet blob stockage Azure.

La dépendance spring-cloud-azure-starter-storage-file-share est requise uniquement lorsque vous utilisez le partage de fichiers stockage Azure.

Pourboire

Nous fournissons également spring-cloud-azure-starter-storage pour prendre en charge toutes les fonctionnalités de Stockage. Si vous choisissez de l’utiliser, spring.cloud.azure.storage.enable est la propriété à configurer et la valeur par défaut est true. Vous pouvez ensuite utiliser spring.cloud.azure.storage.<storage-service>.enable pour désactiver les services inutiles.

Configuration

Note

Si vous utilisez un principal de sécurité pour authentifier et autoriser avec Microsoft Entra ID pour accéder à une ressource Azure, assurez-vous que le principal de sécurité a reçu l’autorisation suffisante pour accéder à la ressource Azure. Pour plus d’informations, consultez Autoriser l’accès avec microsoft Entra ID.

Le tableau suivant répertorie les propriétés configurables de spring-cloud-azure-starter-storage-blob:

Propriété Faire défaut Description
spring.cloud.azure.storage.blob.enabled vrai Valeur qui indique si un service Stockage Blob Azure est activé.
spring.cloud.azure.storage.blob.endpoint URI permettant de se connecter au Stockage Blob Azure.
spring.cloud.azure.storage.blob.account-key Clé privée à connecter au Stockage Blob Azure.
spring.cloud.azure.storage.blob.account-name Nom du compte Blob Stockage Azure.

Le tableau suivant répertorie les propriétés configurables de spring-cloud-azure-starter-storage-file-share:

Propriété Faire défaut Description
spring.cloud.azure.storage.fileshare.enabled vrai Valeur qui indique si le service stockage de fichiers Azure est activé.
spring.cloud.azure.storage.fileshare.endpoint URI à connecter au stockage de fichiers Azure.
spring.cloud.azure.storage.fileshare.account-key Clé privée pour se connecter au stockage de fichiers Azure.
spring.cloud.azure.storage.fileshare.account-name Nom du compte de partage de fichiers stockage Azure.

Utilisation de base

Ajoutez les propriétés suivantes à votre fichier 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}

Obtenir une ressource

Obtenir une ressource avec @Value

Vous pouvez utiliser l’annotation de @Value("azure-blob://[your-container-name]/[your-blob-name]") pour connecter automatiquement une ressource d’objet blob, comme illustré dans l’exemple suivant :

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

Vous pouvez utiliser l’annotation de @Value("azure-file://[your-fileshare-name]/[your-file-name]") pour connecter automatiquement une ressource de fichier, comme illustré dans l’exemple suivant :

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

Obtenir une ressource avec 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]");

Obtenir des ressources en recherchant un modèle

Vous pouvez utiliser une classe d’implémentation de ResourcePatternResolver pour rechercher des ressources. Utilisez AzureStorageBlobProtocolResolver pour rechercher des ressources blob et AzureStorageFileProtocolResolver pour rechercher des ressources file.

  • Pour la recherche de modèles, le searchPattern doit commencer par azure-blob:// ou azure-file://. Par exemple, azure-blob://**/** signifie répertorier tous les objets blob de tous les conteneurs, et azure-blob://demo-container/** signifie répertorier tous les objets blob du conteneur demo-container, y compris tout sous-dossier.

  • Pour la recherche d’emplacement, l'searchLocation doit commencer par azure-blob:// ou azure-file:// et le chemin d’accès du fichier restant doit exister, sinon une exception est levée.

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

Gestion avec la ressource

Télécharger des données à partir d’une ressource spécifique

Vous pouvez télécharger une ressource à partir d’objets blob de stockage Azure ou de partage de fichiers avec la méthode getInputStream() de 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();

Charger des données vers une ressource spécifique

Vous pouvez effectuer un chargement vers une ressource vers un stockage d’objets blob ou de fichiers Azure en cas de conversion du Resource Spring sur WritableResource, comme illustré dans l’exemple suivant :

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

Chargement en plusieurs parties

Les fichiers dont la taille est supérieure à 4 Mio sont chargés dans stockage Azure en parallèle.

Échantillons

Consultez les storage-blob-sample et storage-file-sample référentiels sur GitHub.