次の方法で共有


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 使用して、Spring Boot Starter で使用できるカスタム Spring Boot アプリケーションを作成する方法について説明します。

Azure Cosmos DB は、開発者が SQL、MongoDB、Graph、Table API など、さまざまな標準 API を使用してデータを操作できるようにする、グローバルに分散されたデータベース サービスです。 Microsoft の Spring Boot Starter を使用すると、開発者は Azure Cosmos DB for NoSQL と簡単に統合できる Spring Boot アプリケーションを使用できます。

前提 条件

Azure portal を使用して Azure Cosmos DB を作成する

Azure Cosmos DB インスタンスを作成するには、次の手順に従います。

  1. Azure Portal を参照して、[リソースを作成] を選択します。

  2. [データベース] を選択してから、[Azure Cosmos DB] を選択します。

  3. [Azure Cosmos DB アカウントの作成] 画面で、 Azure Cosmos DB for NoSQLを選択します。

    Azure Cosmos DB for NoSQL オプションが強調表示された [Azure Cosmos DB アカウントの作成] ページを示す Azure portal のスクリーンショット。

  4. Azure Cosmos DB ページで、次の情報を入力します。

    • データベースに使用する サブスクリプション を選択します。
    • データベースの新しい リソース グループ を作成するか、既存のリソース グループを選択するかを指定します。
    • データベースの URI として使用する一意の アカウント名を入力します。 例: contosoaccounttest
    • データベースの 場所 を指定します。
    • デモンストレーション目的でアカウントを作成する場合は、フリーティア割引を適用 を選択します。
    • 残りのオプションと設定はそのままにします。
  5. [確認および作成] を選択し、仕様を確認して [作成] を選択します。

    Azure portal 上で、Azure Cosmos DB for NoSQL 設定が示された Azure Cosmos DB アカウント作成ページのスクリーンショットです。

  6. データベースが作成されると、Azure ダッシュボードの、および Azure Cosmos DB ページの すべてのリソースの一覧に表示されます。 新しく作成した Azure Cosmos DB のデータベースとコンテナーを作成するには、「クイック スタート: Azure portalから Azure Cosmos DB アカウント、データベース、コンテナー、および項目を作成する」の「データベースとコンテナーの の追加」セクションを参照してください。 これらの任意の場所のデータベースを選択して、キャッシュのプロパティ ページを開くことができます。

  7. データベースのプロパティ ページが表示されたら、キー を選択し、データベースの URI とアクセス キーをコピーします。 これらの値は、Spring Boot アプリケーションで使用します。

    Azure Cosmos DB アカウントの [キー] ページが表示中の Azure portal のスクリーンショット。

重要

新しく作成した 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 サンプルを使用することもできます。 その後、を直接スキップしてビルドし、のアプリをテストできます。

  1. https://start.spring.io/ を参照します。

  2. 次のオプションを指定します。

    • 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で確認できます。

  3. 以前に一覧したオプションを指定したら、[生成] を選択します。

  4. メッセージが表示されたら、ローカル コンピューター上のパスにプロジェクトをダウンロードし、ファイルを抽出します。

これで、単純な Spring Boot アプリケーションを編集する準備ができました。

Azure Spring Boot Starter を使用するように Spring Boot アプリケーションを構成する

  1. アプリのディレクトリで pom.xml ファイルを見つけます。例えば:

    C:\SpringBoot\wingtiptoysdata\pom.xml

    -又は-

    /users/example/home/wingtiptoysdata/pom.xml

  2. テキスト エディターで 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 開発者ガイドの概要」セクションを参照してください。

  3. pom.xml ファイルを保存して閉じます。

Azure Cosmos DB を使用するように Spring Boot アプリケーションを構成する

  1. アプリの リソース ディレクトリで、application.properties ファイルを見つけます。例えば:

    C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties

    -又は-

    /users/example/home/wingtiptoysdata/src/main/resources/application.properties

  2. テキスト エディターで 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
    
  3. application.properties ファイルを保存して閉じます。

基本的なデータベース機能を実装するサンプル コードを追加する

このセクションでは、ユーザー データを格納するための 2 つの Java クラスを作成します。 次に、メイン アプリケーション クラスを変更して、User クラスのインスタンスを作成し、データベースに保存します。

ユーザー データを格納するための基本クラスを定義する

  1. メイン アプリケーションの Java ファイルと同じディレクトリに、User.java という名前の新しいファイルを作成します。

  2. テキスト エディターで 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);
        }
    }
    
  3. User.java ファイルを保存して閉じます。

データ リポジトリ インターフェイスを定義する

  1. メイン アプリケーション Java ファイルと同じディレクトリに、UserRepository.java という名前の新しいファイルを作成します。

  2. テキスト エディターで 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 を提供します。

  3. UserRepository.java ファイルを保存して閉じます。

メイン アプリケーション クラスを変更する

  1. アプリケーションのパッケージ ディレクトリでメイン アプリケーションの Java ファイルを見つけます。次に例を示します。

    C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java

    -又は-

    /users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java

  2. メイン アプリケーション 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());
        }
    }
    
  3. メイン アプリケーションの Java ファイルを保存して閉じます。

アプリをビルドしてテストする

  1. コマンド プロンプトを開き、pom.xml ファイルがあるフォルダーに移動します。例えば:

    cd C:\SpringBoot\wingtiptoysdata

    -又は-

    cd /users/example/home/wingtiptoysdata

  2. 次のコマンドを使用して、アプリケーションをビルドして実行します。

    ./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 での 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 と、Azure DevOps と Javaの使用に関する を参照してください。

Spring Framework は、Java 開発者がエンタープライズ レベルのアプリケーションを作成するのに役立つオープンソース ソリューションです。 そのプラットフォームの上に構築されているより一般的なプロジェクトの 1 つは、Spring Bootです。これは、スタンドアロンの Java アプリケーションを作成するための簡略化されたアプローチを提供します。 開発者が Spring Boot を使い始めるのに役立つよう、https://github.com/spring-guides/でいくつかのサンプル Spring Boot パッケージを入手できます。 基本的な Spring Boot プロジェクトの一覧から選択するだけでなく、Spring Initializr は、開発者がカスタム Spring Boot アプリケーションの作成を開始するのに役立ちます。