Penanganan sumber daya Spring Cloud Azure

Artikel ini berlaku untuk: ✔️ Versi 4.14.0 ✔️ Versi 5.8.0

Proyek Spring menyediakan abstraksi Spring Resources untuk mengakses sejumlah sumber daya tingkat rendah. Proyek ini menyediakan antarmuka seperti Resource, ResourceLoader dan ResourcePatternResolver. Spring Cloud Azure mengimplementasikan antarmuka ini untuk layanan Azure Storage, yang memungkinkan Anda berinteraksi dengan Blob penyimpanan Azure dan Berbagi File menggunakan model pemrograman Spring. Spring Cloud Azure menyediakan spring-cloud-azure-starter-storage-blob dan spring-cloud-azure-starter-storage-file-share untuk mengonfigurasi Azure Storage Blob dan Azure Storage File Share secara otomatis.

Tabel berikut ini mencantumkan pustaka terkait Azure Storage:

Starter Layanan Deskripsi
spring-cloud-azure-starter-storage-blob Azure Storage Blob Memungkinkan data yang tidak terstruktur disimpan dan diakses dalam skala besar dalam blob blok.
spring-cloud-azure-starter-storage-file-share Berbagi File Azure Storage Menawarkan berbagi file cloud terkelola sepenuhnya yang dapat Anda akses dari mana saja melalui protokol Blok Pesan Server (SMB) standar industri.

Penyiapan dependensi

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

Dependensi spring-cloud-azure-starter-storage-blob hanya diperlukan saat Anda menggunakan Azure Storage Blob.

Dependensi spring-cloud-azure-starter-storage-file-share hanya diperlukan saat Anda menggunakan Azure Storage File Share.

Tip

Kami juga menyediakan spring-cloud-azure-starter-storage untuk mendukung semua fitur Storage. Jika Anda memilih untuk menggunakannya, spring.cloud.azure.storage.enable adalah properti untuk dikonfigurasi dan nilai defaultnya adalah true. Anda kemudian dapat menggunakan spring.cloud.azure.storage.<storage-service>.enable untuk menonaktifkan layanan yang tidak diperlukan.

Konfigurasi

Catatan

Jika Anda menggunakan prinsip keamanan untuk mengautentikasi dan mengotorisasi dengan ID Microsoft Entra untuk mengakses sumber daya Azure, pastikan prinsip keamanan telah diberikan izin yang memadai untuk mengakses sumber daya Azure. Untuk informasi selengkapnya, lihat Mengotorisasi akses dengan MICROSOFT Entra ID.

Tabel berikut mencantumkan properti yang dapat dikonfigurasi dari spring-cloud-azure-starter-storage-blob:

Properti Default Deskripsi
spring.cloud.azure.storage.blob.enabled benar Nilai yang menunjukkan apakah layanan Azure Blob Storage diaktifkan.
spring.cloud.azure.storage.blob.endpoint URI untuk menyambungkan ke Azure Blob Storage.
spring.cloud.azure.storage.blob.account-key Kunci privat untuk menyambungkan ke Azure Blob Storage.
spring.cloud.azure.storage.blob.account-name Nama akun Azure Storage Blob.

Tabel berikut mencantumkan properti yang dapat dikonfigurasi dari spring-cloud-azure-starter-storage-file-share:

Properti Default Deskripsi
spring.cloud.azure.storage.fileshare.enabled benar Nilai yang menunjukkan apakah layanan Azure File Storage diaktifkan.
spring.cloud.azure.storage.fileshare.endpoint URI untuk menyambungkan ke Azure File Storage.
spring.cloud.azure.storage.fileshare.account-key Kunci privat untuk menyambungkan ke Azure File Storage.
spring.cloud.azure.storage.fileshare.account-name Nama akun Berbagi File Azure Storage.

Penggunaan dasar

Tambahkan properti berikut ke file 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}

Mendapatkan sumber daya

Mendapatkan sumber daya dengan @Value

Anda dapat menggunakan anotasi @Value("azure-blob://[your-container-name]/[your-blob-name]") untuk mengotomatiskan sumber daya blob, seperti yang ditunjukkan dalam contoh berikut:

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

Anda dapat menggunakan anotasi @Value("azure-file://[your-fileshare-name]/[your-file-name]") untuk mengotomatiskan sumber daya file, seperti yang ditunjukkan dalam contoh berikut:

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

Mendapatkan sumber daya dengan 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]");

Mendapatkan sumber daya dengan mencari pola

Anda dapat menggunakan kelas ResourcePatternResolver implementasi untuk mencari sumber daya. Gunakan AzureStorageBlobProtocolResolver untuk mencari blob sumber daya dan AzureStorageFileProtocolResolver untuk mencari file sumber daya.

  • Untuk pencarian pola, searchPattern harus dimulai dengan azure-blob:// atau azure-file://. Misalnya, azure-blob://**/** berarti untuk mencantumkan semua blob di semua kontainer, dan azure-blob://demo-container/** berarti untuk mencantumkan semua blob dalam demo-container kontainer, termasuk sub-folder apa pun.

  • Untuk pencarian lokasi, searchLocation harus dimulai dengan azure-blob:// atau azure-file:// dan jalur file yang tersisa harus ada, jika tidak, pengecualian akan dilemparkan.

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

Penanganan dengan sumber daya

Mengunduh data dari sumber daya tertentu

Anda dapat mengunduh sumber daya dari Azure Storage Blob atau File Share dengan getInputStream() metode 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();

Mengunggah data ke sumber daya tertentu

Anda dapat mengunggah ke sumber daya ke Azure Blob atau penyimpanan file dengan mentransmisikan Spring Resource ke WritableResource, seperti yang ditunjukkan dalam contoh berikut:

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

Unggahan multipihak

File yang lebih besar dari 4 MiB akan diunggah ke Azure Storage secara paralel.

Sampel

Lihat repositori storage-blob-sample dan storage-file-sample di GitHub.