Обработка ресурсов Spring Cloud Azure
Эта статья относится к:✅ версии 4.19.0 ✅ версии 5.19.0
Проект Spring предоставляет Spring Resources абстракции для доступа к ряду низкоуровневых ресурсов. Проект предоставляет такие интерфейсы, как Resource
, ResourceLoader
и ResourcePatternResolver
. Spring Cloud Azure реализует эти интерфейсы для служб хранилища Azure, что позволяет взаимодействовать с BLOB-объектами хранилища Azure и общей папкой с помощью модели программирования Spring. Spring Cloud Azure предоставляет spring-cloud-azure-starter-storage-blob
и spring-cloud-azure-starter-storage-file-share
для автоматической настройки BLOB-объектов службы хранилища Azure и общей папки службы хранилища Azure.
В следующей таблице перечислены связанные библиотеки службы хранилища Azure:
Стартер | Служба | Описание |
---|---|---|
spring-cloud-azure-starter-storage-blob | BLOB-объект службы хранилища Azure | Позволяет хранить и получать доступ к неструктурированным данным в большом масштабе в блочных BLOB-объектах. |
spring-cloud-azure-starter-storage-file-share | Общая папка службы хранилища Azure | Предоставляет полностью управляемые облачные общие папки, к которым можно обращаться в любом месте через стандартный протокол SMB. |
Настройка зависимостей
<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>
Зависимость spring-cloud-azure-starter-storage-blob
требуется только при использовании БОЛЬШОго двоичного объекта службы хранилища Azure.
Зависимость spring-cloud-azure-starter-storage-file-share
требуется только при использовании общей папки службы хранилища Azure.
Кончик
Мы также предоставляем spring-cloud-azure-starter-storage
для поддержки всех функций хранилища. Если вы решили использовать его, spring.cloud.azure.storage.enable
является свойством для настройки, а значение по умолчанию — true
. Затем можно использовать spring.cloud.azure.storage.<storage-service>.enable
для отключения ненужных служб.
Конфигурация
Заметка
Если вы используете субъект безопасности для проверки подлинности и авторизации с помощью идентификатора Microsoft Entra для доступа к ресурсу Azure, убедитесь, что субъект безопасности предоставлен достаточно разрешений для доступа к ресурсу Azure. Дополнительные сведения см. в разделе Авторизация доступа с помощьюидентификатора Microsoft Entra.
В следующей таблице перечислены настраиваемые свойства spring-cloud-azure-starter-storage-blob
:
Свойство | По умолчанию | Описание |
---|---|---|
spring.cloud.azure.storage.blob.enabled | истинный | Значение, указывающее, включена ли служба хранилища BLOB-объектов Azure. |
spring.cloud.azure.storage.blob.endpoint | Универсальный код ресурса (URI) для подключения к хранилищу BLOB-объектов Azure. | |
spring.cloud.azure.storage.blob.account-key | Закрытый ключ для подключения к хранилищу BLOB-объектов Azure. | |
spring.cloud.azure.storage.blob.account-name | Имя учетной записи BLOB-объекта службы хранилища Azure. |
В следующей таблице перечислены настраиваемые свойства spring-cloud-azure-starter-storage-file-share
:
Свойство | По умолчанию | Описание |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | истинный | Значение, указывающее, включена ли служба хранилища файлов Azure. |
spring.cloud.azure.storage.fileshare.endpoint | Универсальный код ресурса (URI) для подключения к хранилищу файлов Azure. | |
spring.cloud.azure.storage.fileshare.account-key | Закрытый ключ для подключения к хранилищу файлов Azure. | |
spring.cloud.azure.storage.fileshare.account-name | Имя учетной записи общей папки службы хранилища Azure. |
Базовое использование
Добавьте следующие свойства в файл 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}
Получение ресурса
Получение ресурса с помощью @Value
Заметку @Value("azure-blob://[your-container-name]/[your-blob-name]")
можно использовать для автоматической отправки ресурса большого двоичного объекта, как показано в следующем примере:
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
Заметку @Value("azure-file://[your-fileshare-name]/[your-file-name]")
можно использовать для автоматической отправки ресурса файла, как показано в следующем примере:
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
Получение ресурса с помощью 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]");
Получение ресурсов путем поиска шаблона
Для поиска ресурсов можно использовать класс реализации ResourcePatternResolver
. Используйте AzureStorageBlobProtocolResolver
для поиска blob
ресурсов и AzureStorageFileProtocolResolver
для поиска file
ресурсов.
Для поиска шаблонов
searchPattern
должно начинаться сazure-blob://
илиazure-file://
. Например,azure-blob://**/**
означает перечисление всех больших двоичных объектов во всех контейнерах иazure-blob://demo-container/**
означает перечисление всех больших двоичных объектов в контейнереdemo-container
, включая любую вложенную папку.Для поиска по расположению
searchLocation
должно начинаться сazure-blob://
илиazure-file://
, а остальный путь к файлу должен существовать, в противном случае будет создано исключение.
@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");
Обработка с помощью ресурса
Скачивание данных из определенного ресурса
Вы можете скачать ресурс из БОЛЬШОго двоичного объекта службы хранилища Azure или общей папки с помощью метода getInputStream()
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();
Отправка данных в конкретный ресурс
Вы можете отправить ресурс в хранилище BLOB-объектов Или файлов Azure, приведения Resource
Spring к WritableResource
, как показано в следующем примере:
@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());
}
Отправка с несколькими частями
Файлы размером более 4 МиБ будут отправляться в службу хранилища Azure параллельно.
Образцы
На сайте GitHub см.