Control de recursos de Azure de Spring Cloud

Este artículo se aplica a: ✔️ Versión 4.14.0 ✔️ versión 5.8.0

El proyecto Spring proporciona una abstracción de Recursos de Spring para acceder a una serie de recursos de bajo nivel. El proyecto proporciona interfaces como Resource, ResourceLoader y ResourcePatternResolver. Spring Cloud Azure implementa estas interfaces para los servicios de Azure Storage, lo que permite interactuar con Azure Storage Blob y File Share mediante el modelo de programación spring. Spring Cloud Azure proporciona spring-cloud-azure-starter-storage-blob y spring-cloud-azure-starter-storage-file-share configura automáticamente blob de Azure Storage y recurso compartido de archivos de Azure Storage.

En la tabla siguiente se enumeran las bibliotecas relacionadas con Azure Storage:

Inicio Servicio Descripción
spring-cloud-azure-starter-storage-blob Azure Storage Blob Permite que los datos no estructurados se almacenen y accedan a una escala masiva en blobs en bloques.
spring-cloud-azure-starter-storage-file-share Recurso compartido de archivos de Azure Storage Ofrece recursos compartidos de archivos en la nube totalmente administrados a los que puede acceder desde cualquier lugar a través del protocolo de bloque de mensajes del servidor (SMB) estándar del sector.

Configuración de dependencias

<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 dependencia solo es necesaria cuando se usa Azure Storage Blob.

La spring-cloud-azure-starter-storage-file-share dependencia solo es necesaria cuando se usa el recurso compartido de archivos de Azure Storage.

Sugerencia

También proporcionamos spring-cloud-azure-starter-storage soporte para todas las características de Storage. Si decide usarlo, spring.cloud.azure.storage.enable es la propiedad para configurar y el valor predeterminado es true. Después, puede usar spring.cloud.azure.storage.<storage-service>.enable para deshabilitar los servicios innecesarios.

Configuración

Nota:

Si usa una entidad de seguridad para autenticar y autorizar con el identificador de Entra de Microsoft para acceder a un recurso de Azure, asegúrese de que a la entidad de seguridad se le ha concedido permiso suficiente para acceder al recurso de Azure. Para más información, vea Autorización del acceso mediante Microsoft Entra ID.

En la tabla siguiente se enumeran las propiedades configurables de spring-cloud-azure-starter-storage-blob:

Propiedad Valor predeterminado Descripción
spring.cloud.azure.storage.blob.enabled true Valor que indica si un servicio de Azure Blob Storage está habilitado.
spring.cloud.azure.storage.blob.endpoint URI para conectarse a Azure Blob Storage.
spring.cloud.azure.storage.blob.account-key Clave privada para conectarse a Azure Blob Storage.
spring.cloud.azure.storage.blob.account-name Nombre de la cuenta de Blob de Azure Storage.

En la tabla siguiente se enumeran las propiedades configurables de spring-cloud-azure-starter-storage-file-share:

Propiedad Valor predeterminado Descripción
spring.cloud.azure.storage.fileshare.enabled true Valor que indica si el servicio Azure File Storage está habilitado.
spring.cloud.azure.storage.fileshare.endpoint URI para conectarse a Azure File Storage.
spring.cloud.azure.storage.fileshare.account-key Clave privada para conectarse a Azure File Storage.
spring.cloud.azure.storage.fileshare.account-name Nombre de la cuenta del recurso compartido de archivos de Azure Storage.

Uso básico

Agregue las siguientes propiedades al archivo 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}

Obtención de un recurso

Obtención de un recurso con @Value

Puede usar la anotación de @Value("azure-blob://[your-container-name]/[your-blob-name]") para conectar automáticamente un recurso de blob, como se muestra en el ejemplo siguiente:

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

Puede usar la anotación de @Value("azure-file://[your-fileshare-name]/[your-file-name]") para conectar automáticamente un recurso de archivo, como se muestra en el ejemplo siguiente:

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

Obtención de un recurso 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]");

Obtención de recursos mediante la búsqueda de patrones

Puede usar una clase de implementación de ResourcePatternResolver para buscar recursos. Use AzureStorageBlobProtocolResolver para buscar blob recursos y AzureStorageFileProtocolResolver para buscar file recursos.

  • Para la searchPattern búsqueda de patrones, debe comenzar con azure-blob:// o azure-file://. Por ejemplo, azure-blob://**/** significa enumerar todos los blobs de todos los contenedores y azure-blob://demo-container/** significa enumerar todos los blobs del demo-container contenedor, incluida cualquier subcarpeta.

  • Para la searchLocation búsqueda de ubicación, debe comenzar con azure-blob:// o azure-file:// y debe existir la ruta de acceso del archivo restante; de lo contrario, se producirá una excepción.

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

Control con el recurso

Descarga de datos de un recurso específico

Puede descargar un recurso de Azure Storage Blob o Recurso compartido de archivos con el getInputStream() método 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();

Carga de datos en un recurso específico

Puede cargar en un recurso en Azure Blob o almacenamiento de archivos mediante la conversión de Spring Resource a WritableResource, como se muestra en el ejemplo siguiente:

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

Carga de varias partes

Los archivos mayores de 4 MiB se cargarán en Azure Storage en paralelo.

Ejemplos

Consulte los repositorios storage-blob-sample y storage-file-sample en GitHub.