このガイドでは、Azure Cosmos DB for MongoDB 仮想コア クラスターに接続する Java コンソール アプリケーションを開発します。 このガイドには、開発環境を設定し、Azure SDK for Java の azure-identity
パッケージを使用して認証を行い、データベースとコレクションを操作してドキュメントを管理する手順が含まれています。
[前提条件]
- 既存の Azure Cosmos DB for MongoDB (仮想コア) クラスター。
Azure Cloud Shell の Azure CLI の最新バージョン。
- CLI 参照コマンドをローカルで実行する場合は、
az login
コマンドを使用して Azure CLI にサインインします。
- CLI 参照コマンドをローカルで実行する場合は、
クラスター用に構成された Microsoft Entra 認証で、あなたの ID に
dbOwner
ロールが付与されています。- Microsoft Entra 認証を有効にするには、 構成ガイドを確認します。
Java の最新バージョン。
コンソール アプリケーションを構成する
次に、新しいコンソール アプリケーション プロジェクトを作成し、クラスターに対して認証するために必要なライブラリをインポートします。
Maven コマンド ライン ツールを使用して、新しい Maven プロジェクトを作成します。
mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
プロジェクト ディレクトリに移動します。
cd mongodb-console-app
適切なパッケージ ディレクトリ
Main
クラスを持つ新しいApp.java ファイルを作成します。mkdir -p src/main/java/com/cosmicworks touch src/main/java/com/cosmicworks/App.java
pom.xml
azure-identity
依存関係を追加します。<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.4</version> </dependency>
pom.xml
mongodb-driver-sync
依存関係を追加します。<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.4.0</version> </dependency>
クラスターに接続する
次に、 Azure.Identity
ライブラリを使用して、クラスターへの接続に使用する TokenCredential
を取得します。 公式の MongoDB ドライバーには、クラスターに接続するときに使用するために Microsoft Entra からトークンを取得するために実装する必要がある特別なインターフェイスがあります。
まず、Java クラス ファイルの先頭にある必要なクラスをインポートします。
import java.util.concurrent.TimeUnit; import org.bson.Document; import org.bson.conversions.Bson; import com.azure.core.credential.TokenCredential; import com.azure.core.credential.TokenRequestContext; import com.azure.identity.DefaultAzureCredentialBuilder; import com.mongodb.MongoClientSettings; import com.mongodb.MongoCredential; import com.mongodb.MongoCredential.OidcCallbackContext; import com.mongodb.MongoCredential.OidcCallbackResult; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.ReplaceOptions; import com.mongodb.client.result.UpdateResult;
main メソッドで、
DefaultAzureCredential
インスタンスを作成し、トークンをフェッチするように OpenID Connect (OIDC) コールバックを設定します。TokenCredential credential = new DefaultAzureCredentialBuilder().build(); MongoCredential.OidcCallback oidcCallback = new MongoCredential.OidcCallback() { @Override public OidcCallbackResult onRequest(OidcCallbackContext context) { TokenRequestContext tokenRequestContext = new TokenRequestContext() .addScopes("https://ossrdbms-aad.database.windows.net/.default"); String token = credential.getTokenSync(tokenRequestContext).getToken(); return new OidcCallbackResult(token); } };
以前に定義したコールバックを使用して、
MongoCredential
の新しいインスタンスを作成します。MongoCredential mongoCredential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", oidcCallback);
クラスターの名前とホスト エンドポイント全体の変数を作成します。
String clusterName = "<azure-cosmos-db-mongodb-vcore-cluster-name>"; String host = clusterName + ".global.mongocluster.cosmos.azure.com";
ホスト、接続のベスト プラクティス、資格情報を使用して、
MongoClientSettings
インスタンスを構築します。MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings(builder -> builder .srvHost(host)) .applyToSocketSettings(builder -> builder .connectTimeout(2, TimeUnit.MINUTES)) .applyToSslSettings(builder -> builder .enabled(true)) .retryWrites(true) .credential(mongoCredential) .build();
構築された設定を使用して、新しい
MongoClient
を作成します。MongoClient client = MongoClients.create(settings); System.out.println("Client created");
一般的な操作を実行する
最後に、公式ライブラリを使用して、データベース、コレクション、ドキュメントで一般的なタスクを実行します。 ここでは、MongoDB または DocumentDB と対話してコレクションと項目を管理する場合と同じクラスとメソッドを使用します。
database
とcollection
への参照を取得します。MongoDatabase database = client.getDatabase("<database-name>"); System.out.println("Database pointer created"); MongoCollection<Document> collection = database.getCollection("<collection-name>"); System.out.println("Collection pointer created");
Product
クラスを使用してドキュメントを表します。public class Product { private String _id; private String category; private String name; private int quantity; private double price; private boolean clearance; // Getters and setters ommitted for brevity }
collection.replaceOne
を有効にしたを使用して、新しいドキュメントを作成します。Document document = new Document() .append("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb") .append("category", "gear-surf-surfboards") .append("name", "Yamba Surfboard") .append("quantity", 12) .append("price", 850.00) .append("clearance", false); Bson match = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"); ReplaceOptions options = new ReplaceOptions().upsert(true); UpdateResult result = collection.replaceOne(match, document, options); System.out.println("Document upserted with _id:\\t" + result.getUpsertedId().asString().getValue());
collection.find
と一意識別子を使用して、1 つのドキュメントの検索を実行します。Bson filter = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"); collection.find(filter).forEach(doc -> { System.out.println("Read document _id:\\t" + doc.toJson()); });
バイナリ JSON (BSON) フィルターを使用して一般的なクエリを実行します。
Bson query = Filters.eq("category", "gear-surf-surfboards"); collection.find(query).forEach(doc -> { System.out.println("Found document:\\t" + doc.toJson()); });
フィルターと
collection.deleteMany
を使用してドキュメントを削除する。Bson filter = Filters.eq("clearance", true); collection.deleteMany(filter);