Freigeben über


Erstellen einer Java-Konsolen-App mit Azure Cosmos DB für MongoDB vCore

In diesem Leitfaden entwickeln Sie eine Java-Konsolenanwendung, um eine Verbindung mit einem Azure Cosmos DB für MongoDB vCore-Cluster herzustellen. Das Handbuch enthält Schritte zum Einrichten Ihrer Entwicklungsumgebung, zur Authentifizierung mithilfe des azure-identity Pakets aus dem Azure SDK für Java und zur Interaktion mit der Datenbank und Sammlung zum Verwalten von Dokumenten.

Voraussetzungen

  • Ein vorhandener Azure Cosmos DB für MongoDB (vCore)-Cluster.
  • Die neueste Version der Azure CLI in Azure Cloud Shell.

    • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, melden Sie sich mit dem az login Befehl bei der Azure CLI an.
  • Die für den Cluster konfigurierte Microsoft Entra-Authentifizierung mit der Ihrer Identität zugewiesenen Rolle dbOwner.

  • Neueste Version von Java.

Konfigurieren der Konsolenanwendung

Erstellen Sie als Nächstes ein neues Konsolenanwendungsprojekt, und importieren Sie die erforderlichen Bibliotheken, um sich bei Ihrem Cluster zu authentifizieren.

  1. Erstellen Sie ein neues Maven-Projekt mit den Maven-Befehlszeilentools.

    mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  2. Navigieren Sie zum Projektverzeichnis.

    cd mongodb-console-app
    
  3. Erstellen Sie eine neue App.java Datei mit einer Main Klasse im entsprechenden Paketverzeichnis.

    mkdir -p src/main/java/com/cosmicworks
    touch src/main/java/com/cosmicworks/App.java
    
  4. Fügen Sie der Datei azure-identity die Abhängigkeit hinzu.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.15.4</version>
    </dependency>
    
  5. Fügen Sie der Datei mongodb-driver-sync die Abhängigkeit hinzu.

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>5.4.0</version>
    </dependency>
    

Herstellen einer Verbindung mit dem Cluster

Verwenden Sie nun die Azure.Identity-Bibliothek, um TokenCredential für die Herstellung einer Verbindung mit Ihrem Cluster abzurufen. Der offizielle MongoDB-Treiber verfügt über eine spezielle Schnittstelle, die implementiert werden muss, um Token von Microsoft Entra für die Verwendung beim Herstellen einer Verbindung mit dem Cluster abzurufen.

  1. Importieren Sie zunächst die erforderlichen Klassen oben in der Java-Klassendatei.

    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;
    
  2. Erstellen Sie in Ihrer Hauptmethode eine DefaultAzureCredential Instanz, und richten Sie den OpenID Connect (OIDC)-Rückruf ein, um Token abzurufen.

    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);
        }
    };
    
  3. Erstellen Sie unter Verwendung des zuvor definierten Rückrufs eine neue Instanz von MongoCredential.

    MongoCredential mongoCredential = MongoCredential.createOidcCredential(null)
            .withMechanismProperty("OIDC_CALLBACK", oidcCallback);
    
  4. Erstellen Sie Variablen für den Namen des Clusters und den gesamten Hostendpunkt.

    String clusterName = "<azure-cosmos-db-mongodb-vcore-cluster-name>";
    String host = clusterName + ".global.mongocluster.cosmos.azure.com";
    
  5. Erstellen Sie eine MongoClientSettings Instanz mit dem Host, den bewährten Methoden für die Verbindung und den Anmeldeinformationen.

    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();
    
  6. Erstellen Sie mit den festgelegten Einstellungen einen neuen MongoClient.

    MongoClient client = MongoClients.create(settings);
    
    System.out.println("Client created");
    

Ausführen gängiger Vorgänge

Verwenden Sie schließlich die offizielle Bibliothek, um allgemeine Aufgaben mit Datenbanken, Sammlungen und Dokumenten auszuführen. Hier verwenden Sie die gleichen Klassen und Methoden, mit denen Sie mit MongoDB oder DocumentDB interagieren würden, um Ihre Sammlungen und Elemente zu verwalten.

  1. Rufen Sie Verweise auf Ihre database und collection ab.

    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");
    
  2. Stellen Sie Ihre Dokumente mithilfe einer Product Klasse dar.

    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
    }
    
  3. Erstellen Sie ein neues Dokument mithilfe von collection.replaceOne und mit aktiviertem 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());
    
  4. Führen Sie eine Suche nach einem einzelnen Dokument mit collection.find und dem eindeutigen Bezeichner durch.

    Bson filter = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb");
    
    collection.find(filter).forEach(doc -> {
        System.out.println("Read document _id:\\t" + doc.toJson());
    });
    
  5. Führen Sie eine allgemeine Abfrage mit einem binären JSON-Filter (BSON) aus.

    Bson query = Filters.eq("category", "gear-surf-surfboards");
    
    collection.find(query).forEach(doc -> {
        System.out.println("Found document:\\t" + doc.toJson());
    });
    
  6. Löschen Sie Dokumente mit einem Filter und collection.deleteMany.

    Bson filter = Filters.eq("clearance", true);
    collection.deleteMany(filter);