你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本指南将开发一个 Java 控制台应用程序,以连接到 Azure Cosmos DB for MongoDB vCore 群集。 本指南包括设置开发环境、使用 azure-identity
用于 Java 的 Azure SDK 包进行身份验证以及与数据库和集合进行交互以管理文档的步骤。
先决条件
- 现有的 Azure Cosmos DB for MongoDB (vCore) 群集。
Azure Cloud Shell 中最新版本的 Azure CLI。
- 如果想要在本地运行 CLI 引用命令,请使用
az login
该命令登录到 Azure CLI。
- 如果想要在本地运行 CLI 引用命令,请使用
配置控制台应用程序
接下来,创建新的控制台应用程序项目,并导入必要的库以向群集进行身份验证。
使用 Maven 命令行工具创建新的 Maven 项目。
mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
导航到项目目录。
cd mongodb-console-app
使用相应包目录中的类创建新的
Main
文件。mkdir -p src/main/java/com/cosmicworks touch src/main/java/com/cosmicworks/App.java
将
azure-identity
依赖项添加到 pom.xml 文件。<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.4</version> </dependency>
将
mongodb-driver-sync
依赖项添加到 pom.xml 文件。<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;
在主方法中,创建一个
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
启用 upsert 创建新文档。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
和唯一标识符查找单个文档。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);