Spring プロジェクトは、多数の低レベルのリソースにアクセスするための Spring Resources 抽象化を提供します。 このプロジェクトは、Resource、ResourceLoader、ResourcePatternResolverなどのインターフェイスを提供します。 Spring Cloud Azure には、Azure Storage サービス用のこれらのインターフェイスが実装されています。これにより、Spring プログラミング モデルを使用して Azure Storage BLOB とファイル共有を操作できます。 Spring Cloud Azure には、Azure Storage BLOB と Azure Storage ファイル共有を自動構成するための spring-cloud-azure-starter-storage-blob と spring-cloud-azure-starter-storage-file-share が用意されています。
次の表に、Azure Storage 関連のライブラリを示します。
| スターター | サービス | 形容 |
|---|---|---|
| spring-cloud-azure-starter-storage-blob | Azure Storage Blob | ブロック BLOB の大規模な非構造化データの格納とアクセスを許可します。 |
| Spring-cloud-azure-starter-storage-ファイル共有 | Azure Storage ファイル共有 | 業界標準のサーバー メッセージ ブロック (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 Storage BLOB を使用している場合にのみ必要です。
spring-cloud-azure-starter-storage-file-share 依存関係は、Azure Storage ファイル共有を使用している場合にのみ必要です。
先端
また、Storage のすべての機能をサポートするための spring-cloud-azure-starter-storage も提供しています。 これを使用する場合、spring.cloud.azure.storage.enable は構成するプロパティであり、既定値は trueです。 その後、spring.cloud.azure.storage.<storage-service>.enable を使用して不要なサービスを無効にすることができます。
構成
手記
セキュリティ プリンシパルを使用して、Azure リソースにアクセスするための Microsoft Entra ID で認証と承認を行う場合は、セキュリティ プリンシパルに Azure リソースにアクセスするための十分なアクセス許可が付与されていることを確認してください。 詳細については、「Microsoft Entra IDを使用してアクセスを承認する」を参照してください。
次の表に、spring-cloud-azure-starter-storage-blobの構成可能なプロパティを示します。
| 財産 | デフォルト | 形容 |
|---|---|---|
| spring.cloud.azure.storage.blob.enabled の |
真 | Azure Blob Storage サービスが有効かどうかを示す値。 |
| spring.cloud.azure.storage.blob.endpoint(英語) | Azure Blob Storage に接続する URI。 | |
| spring.cloud.azure.storage.blob.account-key を |
Azure Blob Storage に接続するための秘密キー。 | |
| spring.cloud.azure.storage.blob.account-name (英語) | Azure Storage BLOB アカウント名。 |
次の表に、spring-cloud-azure-starter-storage-file-shareの構成可能なプロパティを示します。
| 財産 | デフォルト | 形容 |
|---|---|---|
| spring.cloud.azure.storage.fileshare.enabled | 真 | Azure File Storage サービスが有効かどうかを示す値。 |
| spring.cloud.azure.storage.fileshare.endpoint を |
Azure File Storage に接続する URI。 | |
| spring.cloud.azure.storage.fileshare.account-key を |
Azure File Storage に接続するための秘密キー。 | |
| spring.cloud.azure.storage.fileshare.account-name を |
Azure Storage ファイル共有アカウント名。 |
基本的な使用方法
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 リソースを検索し、AzureStorageFileProtocolResolverfile リソースを検索します。
パターン検索の場合、
searchPatternはazure-blob://またはazure-file://で始まる必要があります。 たとえば、azure-blob://**/**は、すべてのコンテナー内のすべての BLOB を一覧表示することを意味し、azure-blob://demo-container/**は、サブフォルダーを含め、demo-containerコンテナー内のすべての BLOB を一覧表示することを意味します。場所検索の場合、
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");
リソースを使用した処理
特定のリソースからデータをダウンロードする
getInputStream()の Resource 方法を使用して、Azure Storage BLOB またはファイル共有からリソースをダウンロードできます。
@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();
特定のリソースにデータをアップロードする
次の例に示すように、Spring Resource を WritableResourceにキャストすることで、リソースを Azure BLOB またはファイル ストレージにアップロードできます。
@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 MiB を超えるファイルは、並列で Azure Storage にアップロードされます。
サンプル
gitHub の storage-blob-sample と storage-file-sample リポジトリ