本指南将开发一个 Java 控制台应用程序以连接到 Azure DocumentDB 群集。 本指南包括设置开发环境、使用 azure-identity 用于 Java 的 Azure SDK 包进行身份验证以及与数据库和集合进行交互以管理文档的步骤。
先决条件
Azure 订阅服务
- 如果没有 Azure 订阅,请创建 试用版
现有的 Azure DocumentDB 群集
- 如果没有群集,请 创建新群集
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 将扩展与 Azure CLI 配合使用。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
配置控制台应用程序
接下来,创建新的控制台应用程序项目,并导入必要的库以向群集进行身份验证。
使用 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.chinacloudapi.cn/.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.cn";使用主机、连接最佳做法和凭据来构造
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);