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 conazure-blob://
oazure-file://
. Por ejemplo,azure-blob://**/**
significa enumerar todos los blobs de todos los contenedores yazure-blob://demo-container/**
significa enumerar todos los blobs del contenedor dedemo-container
, incluida cualquier subcarpeta.Para la búsqueda de ubicación, el
searchLocation
debe comenzar conazure-blob://
oazure-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