Azure Spring Boot Starter ライブラリの一つに、Cosmos DBへアクセスするライブラリが存在するのですが、今回はこれについて。
Docsの解説記事としては以下の通りです。
初期設定
Web Application でなくてもいいので、普通にCommandLineRunnerを使って簡易に実装しつつ、挙動を確かめるのがお手軽かと思います。
ライブラリは以下の者を使います。
以下のような依存をつければよいでしょう(執筆時点)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>azure-cosmosdb-spring-boot-starter</artifactId> <version>2.3.5</version> </dependency>
CosmosDBの用意
現在、AzureサブスクリプションにはFreeでCosmosDBを1つだけ作れるのでこれを利用すると良いと思います。
ここで適宜DBとコンテナを作成すると以下の情報が手に入るとおもいます。
- URL
- キー
- DB名
- コンテナ名
サンプルなので、パーティションキーは /id
にしてもらっても問題ないでしょう。
Azure Cosmos DB でのパーティション分割 | Microsoft Docs
構成ファイル
構成は、application.properties
に設定しますが、yamlでも構いません。先ほど取得した情報のうちURI、キー、DB名を定義します。
azure.cosmosdb.uri= azure.cosmosdb.key= azure.cosmosdb.database=
POJOクラスの定義
POJOクラスを定義します。めんどくさいGetter/Setter的なコードはlombokにお任せします。注目すべきは、クラスに指定したDocument
アノテーションです。これにコレクション(コンテナ)を指定します。 あと、PartitionKey
アノテーションはDBを作成したときのパーティションキーに指定します。
package com.example.demo; import com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document; import com.microsoft.azure.spring.data.cosmosdb.core.mapping.PartitionKey; import org.springframework.data.annotation.Id; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor @Document(collection = "Container1") public class Pet { @Id @PartitionKey private String id; private String owner ; private String name; private PetKind kind; }
リポジトリの定義
リポジトリは同期、非同期に二つが用意されています。該当パッケージのJavadocは以下の通りです。
同期で利用したいならCosmosRepository<T,ID>
、非同期で利用したいならReactiveCosmosRepository<T,K>
を使います。
リポジトリはインタフェースを継承して中身は空、実装クラスも用意しなくて問題ないです。面倒くさいところはライブラリがやってくれます。
@Repository public interface PetRepository extends CosmosRepository<Pet, String> { }
CRUD
CRUDはリポジトリ経由で操作できます。DIされるので、それを利用します(実装いらず)。以下は新規作成例です。
@Autowired private PetRepository repository; @Override public void run(String... args) throws Exception { // Crete var pet1 = repository.save(new Pet(UUID.randomUUID().toString(), "suzuki-san", "pochi", PetKind.Doc)); var pet2 = repository.save(new Pet(UUID.randomUUID().toString(), "tanaka-san", "tama", PetKind.Cat)); System.out.println(pet1); System.out.println(pet2); }
実行後、ポータルを参照するとItemが作られていることが確認できます。
提供されている操作自身は、Spring Bootのリポジトリインタフェースを継承しているので、それらが利用出来ると思います。
以上