Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Stellen Sie mit einem MongoDB-Java-Treiber eine Verbindung zu Amazon DocumentDB her
Dieser Abschnitt enthält eine schrittweise Anleitung zum Herstellen einer Verbindung zu Amazon DocumentDB mithilfe von Java-Treibern. Dies wird Ihnen den Einstieg in die Integration von DocumentDB in Ihre Java-Anwendungen erleichtern.
Themen
Schritt 1: Einrichten des Projekts
Erstellen Sie mit Maven ein Java-Projekt:
mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=falseFügen Sie den MongoDB-Java-Treiber als Abhängigkeit für das Projekt in Ihrer Datei 'pom.xml' hinzu:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>
Schritt 2: Erstellen Sie die Verbindungszeichenfolge
Die Amazon DocumentDB-Verbindungszeichenfolge ist wichtig, um eine Verbindung zwischen Ihrer Anwendung und Ihrem DocumentDB-Cluster herzustellen. Diese Zeichenfolge enthält wichtige Informationen wie Cluster-Endpunkt, Port, Authentifizierungsdetails und verschiedene Verbindungsoptionen. Um eine DocumentDB-Verbindungszeichenfolge zu erstellen, beginnen Sie normalerweise mit dem Basisformat:
"mongodb://username:password@cluster-endpoint:port/?[connection options]"
Sie müssen „Benutzername“ und „Passwort“ durch Ihre tatsächlichen Anmeldeinformationen ersetzen. Den Endpunkt und die Portnummer Ihres Clusters finden Sie sowohl im AWS-Managementkonsole als auch über das AWS CLI. Informationen Die Endpunkte eines Clusters finden zum Finden des Cluster-Endpunkts für Ihren Cluster finden Sie unter. Der Standardport für DocumentDB ist 27017.
Beispiele für Verbindungszeichenfolgen
Herstellen einer Verbindung zu DocumentDB mithilfe von Verschlüsselung während der Übertragung und Vergewissern Sie sich, dass Leseanforderungen an Read Replicas weitergeleitet und in die Primärdatei geschrieben werden:
"mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"Herstellen einer Verbindung zu DocumentDB mithilfe der IAM-Authentifizierung:
"mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"
Die verschiedenen verfügbaren Optionen für die Verbindungszeichenfolge lauten wie folgt:
TLS-Zertifikat
tls=true|false— Diese Option aktiviert oder deaktiviert Transport Layer Security (TLS). Standardmäßig ist die Verschlüsselung bei der Übertragung auf dem Amazon DocumentDB-Cluster aktiviert. Daher sollte der Wert für diese Option lauten, sofern TLS nicht auf Cluster-Ebene deaktiviert ist. true
Bei Verwendung von TLS muss der Code ein SSL-Zertifikat bereitstellen, wenn eine Verbindung zu einem DocumentDB-Cluster hergestellt wird. Laden Sie das Zertifikat herunter, das für die sichere Verbindung zum Cluster erforderlich ist: global-bundle.pemglobal-bundle.pem Datei zu verwenden.
Option 1 — Extrahieren Sie alle Zertifikate aus der
global-bundle.pemDatei und verwenden Sie das Keytool von Java, um sie in einer.jksDatei zu speichern, die später im Code verwendet werden kann. Das Skript, das zeigt, wie Verbindung bei aktiviertem TLS herstellen das geht, finden Sie auf der Registerkarte Java.Option 2 — Fügen Sie die
global-bundle.pemDatei dynamisch zum Code hinzu, erstellen Sie einen speicherinternen Keystore und verwenden Sie ihnSSLContext, um das Zertifikat als Teil des Verbindungsaufbaus bereitzustellen.
Aus gelesenen Replikaten lesen
replicaSet=rs0&readPreference=secondaryPreferred— Wenn Sie diese beiden Optionen angeben, werden alle Leseanforderungen an die Read Replicas und die Schreibanforderungen an die primäre Instance weitergeleitet. Die Verwendung replicaSet=rs0 in der Verbindungszeichenfolge ermöglicht es dem MongoDB-Treiber, eine automatisch aktualisierte Ansicht der Cluster-Topologie beizubehalten, sodass Anwendungen den Überblick über aktuelle Knotenkonfigurationen behalten können, wenn Instanzen hinzugefügt oder entfernt werden. Wenn Sie diese Optionen nicht angeben oder diese nicht angeben, werden alle Lese- und Schreibvorgänge an die primäre Instanz readPreference=primary gesendet. Weitere Optionen für finden readPreference Sie unterPräferenzoptionen lesen.
Schreiben Sie Ihr Anliegen und führen Sie ein Tagebuch
Das Problem beim Schreiben bestimmt den Grad der Bestätigung, die von der Datenbank für Schreibvorgänge angefordert wird. MongoDB-Treiber bieten eine Option zur Optimierung von Write-Concern- und Journal-Dateien. Amazon DocumentDB erwartet nicht, dass Sie write concern und journal einstellen, und ignoriert die für und j (wund) writeConcern gesendeten Werte. journal DocumentDB schreibt Daten immer mitwriteConcern: majority undjournal:, true sodass die Schreibvorgänge auf den meisten Knoten dauerhaft aufgezeichnet werden, bevor eine Bestätigung an den Client gesendet wird.
RetryWrites
retryWrites=false— DocumentDB unterstützt keine wiederholbaren Schreibversuche und daher sollte dieses Attribut immer auf gesetzt werden. false
IAM-Authentifizierung
authSource=%24externalund authMechanism=MONGODB-AWS — Diese beiden Parameter werden zur Authentifizierung mit verwendet. AWS Identity and Access Management Die IAM-Authentifizierung ist derzeit nur in der instanzbasierten Cluster-Version 5.0 verfügbar. Weitere Informationen finden Sie unter Authentifizierung mithilfe der IAM-Identität.
Verbindungspool
Diese Optionen sind für das Verbindungspooling verfügbar:
maxPoolSize— Legt die maximale Anzahl von Verbindungen fest, die im Pool erstellt werden können. Wenn alle Verbindungen verwendet werden und eine neue Anfrage eingeht, wartet es darauf, dass eine Verbindung verfügbar wird. Die Standardeinstellung für MongoDB-Java-Treiber ist 100.minPoolSize— Gibt die Mindestanzahl von Verbindungen an, die im Pool jederzeit aufrechterhalten werden sollten. Die Standardeinstellung für MongoDB-Java-Treiber ist 0.maxIdleTimeMS— Legt fest, wie lange eine Verbindung im Pool inaktiv bleiben kann, bevor sie geschlossen und entfernt wird. Die Standardeinstellung für MongoDB-Java-Treiber ist 100 Millisekunden.waitQueueTimeoutMS— Konfiguriert, wie lange ein Thread warten soll, bis eine Verbindung verfügbar ist, wenn der Pool seine maximale Größe erreicht hat. Wenn eine Verbindung innerhalb dieser Zeit nicht verfügbar ist, wird eine Ausnahme ausgelöst. Der Standardwert für MongoDB-Java-Treiber ist 120.000 Millisekunden (2 Minuten).
Parameter für das Verbindungs-Timeout
Ein Timeout ist ein Mechanismus, mit dem die Zeit begrenzt wird, die ein Vorgang oder Verbindungsversuch in Anspruch nehmen kann, bevor er als fehlgeschlagen betrachtet wird. Die folgenden Timeout-Parameter sind verfügbar, um unbestimmte Wartezeiten zu verhindern und die Ressourcenzuweisung zu verwalten:
connectTimeoutMS— Konfiguriert, wie lange der Treiber wartet, um eine Verbindung zum Cluster herzustellen. Die Standardeinstellung ist 10.000 Millisekunden (10 Sekunden).socketTimeoutMS— Gibt an, wie lange der Treiber bei einem Vorgang ohne Schreibzugriff auf eine Antwort vom Server wartet. Die Standardeinstellung ist 0 (kein Timeout oder unendlich).serverSelectionTimeoutMS— Gibt an, wie lange der Treiber darauf wartet, einen verfügbaren Server im Cluster zu finden. Der Standardwert für diese Einstellung beträgt 30 Sekunden und reicht aus, um während des Failovers eine neue primäre Instance auszuwählen.
Schritt 3: Schreiben Sie den Verbindungscode
Das folgende Codebeispiel zeigt, wie eine TLS-Verbindung zu Amazon DocumentDB hergestellt wird:
Es erstellt Javas
KeyStoreund SSLContext>-Objekte. Es erstellt das
MongoClientSettingsObjekt auch, indem es an das ConnectionStringObjekt übergeben wird. Um eine TLS-Verbindung herzustellen, müssen Sie das MongoClientSettingsObjekt verwenden, um dasconnectionstringund zu bindensslcontext.Using
MongoClientsruft ein MongoClientObjekt ab.
public static MongoClient makeDbConnection(String dbName, String DbUserName, String DbPassword, String DbClusterEndPoint, String keyStorePass) throws Exception { MongoClient connectedClient; String connectionOptions = "?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false"; String connectionUrl = "mongodb://" + DbUserName + ":" + DbPassword + "@" + DbClusterEndPoint + ":27017/" + dbName + connectionOptions; try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("src/main/resources/certs/truststore.jks")) { trustStore.load(fis, keyStorePass.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); ConnectionString connectionString = new ConnectionString(connectionUrl); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connectionString) .applyToSslSettings(builder - > { builder.enabled(true); builder.context(sslContext); }) .build(); connectedClient = MongoClients.create(settings); } return connectedClient; } catch (MongoException e5) { throw new RuntimeException(e5); } catch (Exception e) { throw new RuntimeException(e); } }
Schritt 4: Verbindungsausnahmen behandeln
Bei der Arbeit mit DocumentDB in Java-Anwendungen ist der Umgang mit Verbindungsausnahmen entscheidend für die Aufrechterhaltung robuster und zuverlässiger Datenbankoperationen. Bei ordnungsgemäßer Verwaltung helfen diese Ausnahmen nicht nur bei der schnellen Diagnose von Problemen, sondern stellen auch sicher, dass Ihre Anwendung vorübergehende Netzwerkunterbrechungen oder Serverausfälle problemlos bewältigen kann, was zu einer verbesserten Stabilität und Benutzerfreundlichkeit führt. Zu den kritischen Ausnahmen im Zusammenhang mit dem Verbindungsaufbau gehören:
MongoException— Eine allgemeine Ausnahme, die in verschiedenen Szenarien gelten könnte, für die keine spezifischeren Ausnahmen gelten. Stellen Sie sicher, dass diese Ausnahme nach allen anderen spezifischen Ausnahmen behandelt wird, da es sich um eine allgemeine Catch-All-MongoDB-Ausnahme handelt.MongoTimeoutException— Wird ausgegeben, wenn bei einem Vorgang ein Timeout auftritt. Zum Beispiel das Abfragen eines nicht vorhandenen Cluster-Endpunkts.MongoSocketException— Ausgestellt für Netzwerkprobleme. Zum Beispiel eine plötzliche Netzwerkunterbrechung während einer Operation.MongoSecurityException— Wird ausgegeben, wenn die Authentifizierung fehlschlägt. Zum Beispiel beim Herstellen einer Verbindung mit falschen Anmeldeinformationen.MongoConfigurationException— Wird ausgegeben, wenn ein Fehler in der Client-Konfiguration auftritt. Zum Beispiel bei Verwendung einer ungültigen Verbindungszeichenfolge.
Schritt 5: Den Code ausführen
Das folgende Codebeispiel erstellt eine Amazon DocumentDB-Verbindung und druckt alle Datenbanken:
public static void TestConnection() { try (MongoClient mongoClient = makeDbConnection(DATABASE_NAME, DB_USER_NAME, DB_PASSWORD, DB_CLUSTER_ENDPOINT, KEYSTORE_PASSWORD)) { List < String > databases = mongoClient.listDatabaseNames().into(new ArrayList < > ()); System.out.println("Databases: " + databases); } catch (MongoException e) { System.err.println("MongoDB error: " + e.getMessage()); throw new RuntimeException(e); } }
Bewährte Methoden für Verbindungen
Die folgenden bewährten Methoden sollten Sie berücksichtigen, wenn Sie mit einem MongoDB-Java-Treiber eine Verbindung zu Amazon DocumentDB herstellen:
Schließen Sie Ihren immer
MongoClient, wenn Sie den Client nicht mehr benötigen, um Ressourcen freizugeben. Behandeln Sie Ausnahmen angemessen und implementieren Sie eine korrekte Fehlerprotokollierung.
Verwenden Sie Umgebungsvariablen oder speichern AWS Secrets Manager Sie vertrauliche Informationen wie Benutzernamen und Passwörter.