Поделиться через


Обработка ресурсов 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 см. хранилище-blob-sample и репозитории storage-file-sample.