Správa prostředků ve Spring Cloud Azure

Projekt Spring poskytuje Spring Resources abstrakci pro přístup k řadě zdrojů nízké úrovně. Projekt poskytuje rozhraní, jako jsou Resource, ResourceLoader a ResourcePatternResolver. Spring Cloud Azure implementuje tato rozhraní pro služby Azure Storage, která vám umožňují pracovat se službami Azure Blob Storage a Azure File Share pomocí programovacího modelu Spring. Spring Cloud Azure poskytuje spring-cloud-azure-starter-storage-blob a spring-cloud-azure-starter-storage-file-share pro automatickou konfiguraci objektů blob Azure Storage a sdílené složky Azure Storage.

Následující tabulka uvádí knihovny související se službou Azure Storage:

Základní Služba Popis
spring-cloud-azure-starter-storage-blob Azure Storage Blob Umožňuje ukládání nestrukturovaných dat a přístup k nim ve velkém měřítku v blokových objektech blob.
spring-cloud-azure-starter-storage-file-share Sdílená složka Azure Storage Nabízí plně spravované cloudové sdílené složky, ke kterým máte přístup odkudkoli prostřednictvím standardního protokolu SMB (Server Message Block).

Nastavení závislostí

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

Závislost spring-cloud-azure-starter-storage-blob se vyžaduje jenom v případě, že používáte objekt blob služby Azure Storage.

Závislost spring-cloud-azure-starter-storage-file-share se vyžaduje jenom v případě, že používáte sdílenou složku Azure Storage.

Tip

Poskytujeme také spring-cloud-azure-starter-storage pro podporu všech funkcí služby Storage. Pokud se rozhodnete ji použít, spring.cloud.azure.storage.enable je vlastnost, která se má nakonfigurovat a výchozí hodnota je true. Potom můžete pomocí spring.cloud.azure.storage.<storage-service>.enable zakázat nepotřebné služby.

Konfigurace

Poznámka

Pokud k ověřování a autorizaci pomocí ID Microsoft Entra pro přístup k prostředku Azure používáte objekt zabezpečení, ujistěte se, že objekt zabezpečení má dostatečná oprávnění pro přístup k prostředku Azure. Další informace naleznete v tématu Autorizace přístupu pomocí microsoft Entra ID.

Následující tabulka uvádí konfigurovatelné vlastnosti spring-cloud-azure-starter-storage-blob:

Vlastnost Výchozí Popis
spring.cloud.azure.storage.blob.enabled pravda Hodnota, která označuje, jestli je povolená služba Azure Blob Storage.
spring.cloud.azure.storage.blob.endpoint Identifikátor URI pro připojení ke službě Azure Blob Storage.
spring.cloud.azure.storage.blob.account-key Privátní klíč pro připojení ke službě Azure Blob Storage.
spring.cloud.azure.storage.blob.account-name Název účtu azure Storage Blob.

Následující tabulka uvádí konfigurovatelné vlastnosti spring-cloud-azure-starter-storage-file-share:

Vlastnost Výchozí Popis
spring.cloud.azure.storage.fileshare.enabled pravda Hodnota, která označuje, jestli je povolená služba Azure File Storage.
spring.cloud.azure.storage.fileshare.endpoint Identifikátor URI pro připojení ke službě Azure File Storage.
spring.cloud.azure.storage.fileshare.account-key Privátní klíč pro připojení ke službě Azure File Storage.
spring.cloud.azure.storage.fileshare.account-name Název účtu sdílené složky ve službě Azure Storage.

Základní využití

Do souboru application.yml přidejte následující vlastnosti:

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}

Získání prostředku

Získání prostředku pomocí @Value

Anotaci @Value("azure-blob://[your-container-name]/[your-blob-name]") můžete použít k automatickému propojení prostředku blob, jak je znázorněno v následujícím příkladu:

@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;

Anotaci @Value("azure-file://[your-fileshare-name]/[your-file-name]") můžete použít k automatickému propojení souborového prostředku, jak je znázorněno v následujícím příkladu:

@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;

Získání prostředku pomocí ResourceLoaderu

@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]");

Získat prostředky pomocí vyhledávacího vzoru

K vyhledávání prostředků můžete použít třídu implementace ResourcePatternResolver. Pomocí AzureStorageBlobProtocolResolver můžete hledat blob prostředky a AzureStorageFileProtocolResolver hledat file prostředky.

  • Při hledání vzorů by měl searchPattern začínat azure-blob:// nebo azure-file://. Například azure-blob://**/** znamená vypsat všechny objekty blob ve všech kontejnerech a azure-blob://demo-container/** znamená vypsat všechny objekty blob v kontejneru demo-container, včetně jakékoli podsložky.

  • Při vyhledávání cesty má searchLocation začínat na azure-blob:// nebo azure-file:// a zbývající cesta k souboru musí existovat, jinak bude vyvolána výjimka.

@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");

Zpracování s využitím prostředku

Stažení dat z konkrétního prostředku

Prostředek můžete stáhnout z objektu Blob služby Azure Storage nebo ze sdílené složky pomocí metody getInputStream() objektu 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();

Nahrání dat do konkrétního prostředku

Do prostředku v Azure Blob Storage nebo Azure Files můžete nahrát tak, že přetypujete Spring Resource na WritableResource, jak je znázorněno v následujícím příkladu:

@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());
}

Vícedílné nahrávání

Soubory větší než 4 MiB se nahrají paralelně do Služby Azure Storage.

Vzorky

Podívejte se na storage-blob-sample úložiště a storage-file-sample úložiště na GitHubu.