Compartir vía


Control de recursos de Azure de Spring Cloud

Este artículo se aplica a:✅ versión 4.19.0 ✅ versión 5.19.0

El proyecto Spring proporciona una abstracción de Spring Resources 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 para configurar automáticamente blobs de Azure Storage y recurso compartido de archivos de Azure Storage.

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

Iniciador Servicio Descripción
spring-cloud-azure-starter-storage-blob Azure Storage Blob Permite almacenar y acceder a datos no estructurados a gran escala 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 estándar del 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 dependencia spring-cloud-azure-starter-storage-blob solo es necesaria cuando se usa Blob de Azure Storage.

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

Propina

También proporcionamos spring-cloud-azure-starter-storage para admitir todas las características de Storage. Si decide usarlo, spring.cloud.azure.storage.enable es la propiedad que se va a 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 obtener más información, consulte Autorizar el acceso con el identificador de Entra de Microsoft.

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

Propiedad Predeterminado Descripción
spring.cloud.azure.storage.blob.enabled verdadero 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 Predeterminado Descripción
spring.cloud.azure.storage.fileshare.enabled verdadero 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 recursos blob y AzureStorageFileProtocolResolver para buscar recursos file.

  • Para la búsqueda de patrones, el searchPattern 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 contenedor de demo-container, incluida cualquier subcarpeta.

  • Para la búsqueda de ubicación, el searchLocation 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 método 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();

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 en 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.

Muestras

Consulte el storage-blob-sample de y repositorios de storage-file-sample en GitHub.