Azure Cosmos DB NoSQL API を使用してデータにアクセスする
この記事では、Spring Cloud Azure Starter for Spring Data for Azure Cosmos DB をカスタム アプリケーションに追加する方法について説明します。 このスターターを使用すると、Spring Data と Azure Cosmos DB for NoSQL を使用して、Azure Cosmos DB データベースにデータを格納したり、Azure Cosmos DB データベースからデータを取得したりできます。 この記事では、まず、Azure portal を使用して Azure Cosmos DB を作成する方法を示します。 次に、Spring Initializr
Azure Cosmos DB は、開発者が SQL、MongoDB、Graph、Table API など、さまざまな標準 API を使用してデータを操作できるようにする、グローバルに分散されたデータベース サービスです。 Microsoft の Spring Boot Starter を使用すると、開発者は Azure Cosmos DB for NoSQL と簡単に統合できる Spring Boot アプリケーションを使用できます。
前提 条件
Azure サブスクリプション - 無料アカウントを作成します。
Java Development Kit (JDK)、バージョン 8 以降。
Azure portal を使用して Azure Cosmos DB を作成する
Azure Cosmos DB インスタンスを作成するには、次の手順に従います。
Azure Portal を参照して、[リソースを作成] を選択します。
[データベース] を選択してから、[Azure Cosmos DB] を選択します。
[Azure Cosmos DB アカウントの作成] 画面で、 Azure Cosmos DB for NoSQLを選択します。
Azure Cosmos DB ページで、次の情報を入力します。
- データベースに使用する サブスクリプション を選択します。
- データベースの新しい リソース グループ を作成するか、既存のリソース グループを選択するかを指定します。
- データベースの URI として使用する一意の アカウント名を入力します。 例: contosoaccounttest。
- データベースの 場所 を指定します。
- デモンストレーション目的でアカウントを作成する場合は、フリーティア割引を適用 を選択します。
- 残りのオプションと設定はそのままにします。
[確認および作成] を選択し、仕様を確認して [作成] を選択します。
データベースが作成されると、Azure
ダッシュボードの 、および Azure Cosmos DB ページのすべてのリソース との一覧に表示されます。 新しく作成した Azure Cosmos DB のデータベースとコンテナーを作成するには、「クイック スタート: Azure portalから Azure Cosmos DB アカウント、データベース、コンテナー、および項目を作成する」の「データベースとコンテナーの の追加」セクションを参照してください。 これらの任意の場所のデータベースを選択して、キャッシュのプロパティ ページを開くことができます。 データベースのプロパティ ページが表示されたら、キー を選択し、データベースの URI とアクセス キーをコピーします。 これらの値は、Spring Boot アプリケーションで使用します。
重要
新しく作成した Azure Cosmos DB で、現在使用している Azure アカウントに Owner
ロールを割り当てます。 詳細については、Azure portalを使用した Azure ロールの割り当て
Spring Initializr を使用して Spring Boot アプリケーションを作成する
Azure サポートを使用して新しい Spring Boot アプリケーション プロジェクトを作成するには、次の手順に従います。 別の方法として、azure-spring-boot-samples リポジトリの spring-cloud-azure-data-cosmos-sample サンプルを使用することもできます。 その後、を直接スキップしてビルドし、のアプリをテストできます。
https://start.spring.io/ を参照します。
次のオプションを指定します。
- Javaを使用して、Maven プロジェクトを生成します。
- Spring Boot バージョンを 2.7.11に指定します。
- アプリケーションの グループ と Artifact 名を指定します。
- Java バージョン 17 を選択します。
- 依存関係に Azure サポート を加えてください。
手記
Spring Initializr は、グループ と Artifact 名を使用してパッケージ名を作成します。例: com.example.wingtiptoysdata.
Spring Boot のバージョンは、Azure サポートでサポートされているバージョンより高い場合があります。 プロジェクトが自動的に生成されたら、Spring Boot バージョンを Azure でサポートされている最高バージョンに手動で変更できます。このバージョンは、Spring-Versions-Mappingで確認できます。
以前に一覧したオプションを指定したら、[生成] を選択します。
メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードし、ファイルを抽出します。
これで、単純な Spring Boot アプリケーションを編集する準備ができました。
Azure Spring Boot Starter を使用するように Spring Boot アプリケーションを構成する
アプリのディレクトリで pom.xml ファイルを見つけます。例えば:
C:\SpringBoot\wingtiptoysdata\pom.xml
-又は-
/users/example/home/wingtiptoysdata/pom.xml
テキスト エディターで pom.xml ファイルを開き、
<dependencies>
要素に次のコードを追加します。<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId> </dependency>
手記
部品表 (BOM) を使用して Spring Cloud Azure ライブラリのバージョンを管理する方法の詳細については、「Spring Cloud Azure 開発者ガイドの の概要」セクションを参照してください。
pom.xml ファイルを保存して閉じます。
Azure Cosmos DB を使用するように Spring Boot アプリケーションを構成する
アプリの リソース ディレクトリで、application.properties ファイルを見つけます。例えば:
C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties
-又は-
/users/example/home/wingtiptoysdata/src/main/resources/application.properties
テキスト エディターで application.properties ファイルを開き、次の行をファイルに追加し、サンプル値をデータベースの適切なプロパティに置き換えます。
# Specify the DNS URI of your Azure Cosmos DB. spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/ spring.cloud.azure.cosmos.key=your-cosmosdb-account-key # Specify the name of your database. spring.cloud.azure.cosmos.database=contosoaccounttest spring.cloud.azure.cosmos.populate-query-metrics=true
application.properties ファイルを保存して閉じます。
基本的なデータベース機能を実装するサンプル コードを追加する
このセクションでは、ユーザー データを格納するための 2 つの Java クラスを作成します。 次に、メイン アプリケーション クラスを変更して、User
クラスのインスタンスを作成し、データベースに保存します。
ユーザー データを格納するための基本クラスを定義する
メイン アプリケーションの Java ファイルと同じディレクトリに、User.java という名前の新しいファイルを作成します。
テキスト エディターで User.java ファイルを開き、次の行をファイルに追加して、データベースに値を格納および取得する汎用ユーザー クラスを定義します。
package com.example.wingtiptoysdata; import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; import org.springframework.data.annotation.Id; @Container(containerName = "mycollection") public class User { @Id private String id; private String firstName; @PartitionKey private String lastName; private String address; public User() { } public User(String id, String firstName, String lastName, String address) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.address = address; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return String.format("%s %s, %s", firstName, lastName, address); } }
User.java ファイルを保存して閉じます。
データ リポジトリ インターフェイスを定義する
メイン アプリケーション Java ファイルと同じディレクトリに、UserRepository.java という名前の新しいファイルを作成します。
テキスト エディターで UserRepository.java ファイルを開き、ファイルに次の行を追加して、既定の
ReactiveCosmosRepository
インターフェイスを拡張するユーザー リポジトリ インターフェイスを定義します。package com.example.wingtiptoysdata; import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository; import org.springframework.stereotype.Repository; import reactor.core.publisher.Flux; @Repository public interface UserRepository extends ReactiveCosmosRepository<User, String> { Flux<User> findByFirstName(String firstName); }
ReactiveCosmosRepository
インターフェイスは、前のバージョンのスターターからDocumentDbRepository
インターフェイスを置き換えます。 新しいインターフェイスは、基本的な保存、削除、検索操作に同期 API と事後対応 API を提供します。UserRepository.java ファイルを保存して閉じます。
メイン アプリケーション クラスを変更する
アプリケーションのパッケージ ディレクトリでメイン アプリケーションの Java ファイルを見つけます。次に例を示します。
C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java
-又は-
/users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java
メイン アプリケーション Java ファイルをテキスト エディターで開き、ファイルに次の行を追加します。
package com.example.wingtiptoysdata; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.util.Assert; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Optional; @SpringBootApplication public class WingtiptoysdataApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(WingtiptoysdataApplication.class); @Autowired private UserRepository repository; public static void main(String[] args) { SpringApplication.run(WingtiptoysdataApplication.class, args); } public void run(String... var1) { this.repository.deleteAll().block(); LOGGER.info("Deleted all data in container."); final User testUser = new User("testId", "testFirstName", "testLastName", "test address line one"); // Save the User class to Azure Cosmos DB database. final Mono<User> saveUserMono = repository.save(testUser); final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName"); // Nothing happens until we subscribe to these Monos. // findById won't return the user as user isn't present. final Mono<User> findByIdMono = repository.findById(testUser.getId()); final User findByIdUser = findByIdMono.block(); Assert.isNull(findByIdUser, "User must be null"); final User savedUser = saveUserMono.block(); Assert.state(savedUser != null, "Saved user must not be null"); Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match"); firstNameUserFlux.collectList().block(); final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional(); Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user."); final User result = optionalUserResult.get(); Assert.state(result.getFirstName().equals(testUser.getFirstName()), "query result firstName doesn't match!"); Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!"); LOGGER.info("findOne in User collection get result: {}", result.toString()); } }
メイン アプリケーションの Java ファイルを保存して閉じます。
アプリをビルドしてテストする
コマンド プロンプトを開き、pom.xml ファイルがあるフォルダーに移動します。例えば:
cd C:\SpringBoot\wingtiptoysdata
-又は-
cd /users/example/home/wingtiptoysdata
次のコマンドを使用して、アプリケーションをビルドして実行します。
./mvnw clean
このコマンドは、テスト フェーズの一部としてアプリケーションを自動的に実行します。 以下を使用することもできます。
./mvnw spring-boot:run
ビルドとテストの出力後、コンソール ウィンドウに次の例のようなメッセージが表示されます。
INFO 1365 --- [ main] c.e.w.WingtiptoysdataApplication : Deleted all data in container. ... (omitting connection and diagnostics output) ... INFO 1365 --- [ main] c.e.w.WingtiptoysdataApplication : findOne in User collection get result: testFirstName testLastName, test address line one
これらの出力メッセージは、データが Azure Cosmos DB に正常に保存された後、再度取得されたことを示します。
リソースのクリーンアップ
このアプリケーションを引き続き使用しない場合は、先ほど作成した Azure Cosmos DB を含むリソース グループを必ず削除してください。 リソース グループは、Azure portal から削除できます。
次の手順
Spring と Azure の詳細については、Spring on Azure ドキュメント センターに進んでください。
その他のリソース
Azure Cosmos DB と Java の使用の詳細については、次の記事を参照してください。
Azure Cosmos DB の : Java と Azure portal を使用してドキュメント データベースを作成する
Azure での Spring Boot アプリケーションの使用の詳細については、次の記事を参照してください。
[Spring Data Azure Cosmos DB 用 Spring Cloud Azure Starter]
Azure App Service で Spring Boot アプリケーションを Linux にデプロイする
Azure Container Service で Kubernetes クラスターで Spring Boot アプリケーションを実行する
Java での Azure の使用の詳細については、Java 開発者向け Azure
Spring Framework は、Java 開発者がエンタープライズ レベルのアプリケーションを作成するのに役立つオープンソース ソリューションです。 そのプラットフォームの上に構築されているより一般的なプロジェクトの 1 つは、Spring Boot