Управление ресурсами в Spring Cloud Azure

Проект 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 для автоконфигурации Azure Blob Storage и общих файловых ресурсов служба хранилища 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 Blob.

Зависимость 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 ID при доступе к ресурсу 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]") для автоматического внедрения BLOB-ресурса, как показано в следующем примере:

@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://**/** означает вывод списка всех BLOB-объектов во всех контейнерах, а azure-blob://demo-container/** — вывод списка всех BLOB-объектов в контейнере 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");

Обработка с использованием ресурса

Скачивание данных из определенного ресурса

Вы можете скачать ресурс из BLOB-объекта хранилища 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();

Отправка данных в конкретный ресурс

Вы можете отправить ресурс в Azure Blob Storage или файловое хранилище Azure, приведя Spring Resource к 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 параллельно.

Образцы

См. репозитории storage-blob-sample и storage-file-sample на GitHub.