Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Connessione ad Amazon DocumentDB con un driver Java MongoDB
Questa sezione fornisce una step-by-step guida per la connessione ad Amazon DocumentDB utilizzando i driver Java. Questo ti consentirà di iniziare a integrare DocumentDB nelle tue applicazioni Java.
Argomenti
Fase 1: Configurazione del progetto
Usando Maven, crea un progetto java:
mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Aggiungi il driver Java MongoDB come dipendenza per il progetto nel tuo file 'pom.xml':
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>
Passaggio 2: creare la stringa di connessione
La stringa di connessione di Amazon DocumentDB è essenziale per stabilire una connessione tra l'applicazione e il cluster DocumentDB. Questa stringa incapsula informazioni cruciali come l'endpoint del cluster, la porta, i dettagli di autenticazione e varie opzioni di connessione. Per creare una stringa di connessione DocumentDB, in genere si inizia con il formato base:
"mongodb://
username
:password
@cluster-endpoint:port/?[connection options]"
Dovrai sostituire «nome utente» e «password» con le tue credenziali effettive. Puoi trovare l'endpoint e il numero di porta del tuo cluster AWS Management Console sia in che tramite. AWS CLI Vedi Individuazione degli endpoint di un cluster per trovare l'endpoint del cluster per il tuo cluster. La porta predefinita per DocumentDB è 27017.
Esempi di stringhe di connessione
Effettuare una connessione a DocumentDB utilizzando la crittografia in transito e assicurandosi che le richieste di lettura vadano alle repliche di lettura e scrivano al file primario:
"mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
Effettuare una connessione a DocumentDB utilizzando l'autenticazione IAM:
"mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"
Le diverse opzioni disponibili per la stringa di connessione sono le seguenti:
Certificato TLS
tls=true|false
— Questa opzione abilita o disabilita Transport Layer Security (TLS). Per impostazione predefinita, la crittografia in transito è abilitata sul cluster Amazon DocumentDB e pertanto, a meno che TLS non sia disabilitato a livello di cluster, il valore per questa opzione dovrebbe essere. true
Quando si utilizza TLS, il codice deve fornire un certificato SSL durante la creazione della connessione a un cluster DocumentDB. Scarica il certificato necessario per stabilire la connessione sicura al cluster:. global-bundle.pem
global-bundle.pem
file.
Opzione 1: estrai tutti i certificati dal
global-bundle.pem
file e utilizza il keytool di Java per archiviarli in un.jks
file che può essere successivamente utilizzato nel codice. Fate riferimento alla scheda Java Connessione con TLS abilitato per lo script che mostra come eseguire questa operazione.Opzione 2: aggiungi dinamicamente il
global-bundle.pem
file nel codice, crea un keystore in memoria e utilizzaloSSLContext
per fornire il certificato come parte della connessione.
Lettura da repliche lette
replicaSet=rs0&readPreference=secondaryPreferred
— La specificazione di queste due opzioni indirizza tutte le richieste di lettura alle repliche di lettura e le richieste di scrittura all'istanza principale. L'utilizzo replicaSet=rs0
nella stringa di connessione consente al driver MongoDB di mantenere una visualizzazione aggiornata automaticamente della topologia del cluster, consentendo alle applicazioni di mantenere la visibilità delle configurazioni correnti dei nodi man mano che le istanze vengono aggiunte o rimosse. La mancata fornitura di queste opzioni o la mancata specificazione readPreference=primary
invia tutte le letture e le scritture all'istanza principale. Per ulteriori opzioni perreadPreference
, vedere. Leggi le opzioni di preferenza
Scrivi preoccupazioni e scrivi un diario
La preoccupazione relativa alla scrittura determina il livello di riconoscimento richiesto al database per le operazioni di scrittura. I driver MongoDB offrono un'opzione per ottimizzare i file di richiesta di scrittura e di diario. Amazon DocumentDB non prevede che tu imposti write concern e journal e ignora i valori inviati per and j
(w
and)writeConcern
. journal
DocumentDB scrive sempre i dati conwriteConcern
: majority
andjournal
: true
quindi le scritture vengono registrate in modo duraturo sulla maggior parte dei nodi prima di inviare una conferma al client.
RetryWrites
retryWrites=false
— DocumentDB non supporta le scritture riutilizzabili e pertanto questo attributo deve essere sempre impostato su. false
Autenticazione IAM
authSource=%24external
e authMechanism=MONGODB-AWS
— Questi due parametri vengono utilizzati per l'autenticazione tramite. AWS Identity and Access Management L'autenticazione IAM è attualmente disponibile solo nella versione 5.0 del cluster basata su istanze. Per ulteriori informazioni, consulta Autenticazione tramite identità IAM.
Pool di connessioni
Queste opzioni sono disponibili per il pool di connessioni:
maxPoolSize
— Imposta il numero massimo di connessioni che possono essere create nel pool. Quando tutte le connessioni sono in uso e arriva una nuova richiesta, attende che una connessione diventi disponibile. L'impostazione predefinita per i driver Java MongoDB è 100.minPoolSize
— Indica il numero minimo di connessioni che devono essere mantenute nel pool in ogni momento. L'impostazione predefinita per i driver Java MongoDB è 0.maxIdleTimeMS
— Determina per quanto tempo una connessione può rimanere inattiva nel pool prima di essere chiusa e rimossa. L'impostazione predefinita per i driver Java MongoDB è 100 millisecondi.waitQueueTimeoutMS
— Configura per quanto tempo un thread deve attendere prima che una connessione diventi disponibile quando il pool raggiunge la dimensione massima. Se una connessione non diventa disponibile entro questo periodo, viene generata un'eccezione. Il valore predefinito per i driver Java MongoDB è 120.000 millisecondi (2 minuti).
Parametri di timeout della connessione
Il timeout è un meccanismo per limitare il periodo di tempo necessario a un'operazione o a un tentativo di connessione prima che venga considerato fallito. I seguenti parametri di timeout sono disponibili per prevenire attese indefinite e gestire l'allocazione delle risorse:
connectTimeoutMS
— Configura il tempo di attesa del driver per stabilire una connessione al cluster. L'impostazione predefinita è 10.000 millisecondi (10 secondi).socketTimeoutMS
— Speciifica per quanto tempo il driver aspetterà una risposta dal server per un'operazione non di scrittura. L'impostazione predefinita è 0, (nessun timeout o infinito).serverSelectionTimeoutMS
— Specificare quanto tempo il driver aspetterà per trovare un server disponibile nel cluster. Il valore predefinito per questa impostazione è 30 secondi ed è sufficiente per eleggere una nuova istanza primaria durante il failover.
Fase 3: Scrivere il codice di connessione
Il seguente esempio di codice mostra come effettuare una connessione TLS ad Amazon DocumentDB:
Crea oggetti Java
KeyStore
e SSLContext
>. Crea anche l'
MongoClientSettings
oggetto passandolo all' ConnectionString
oggetto. Per stabilire una connessione TLS, è necessario utilizzare l' MongoClientSettings
oggetto per associare l'connectionstring
and.sslcontext
Usando
MongoClients
ottiene un oggetto MongoClient
.
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); } }
Fase 4: Gestire le eccezioni di connessione
Quando si lavora con DocumentDB in applicazioni Java, la gestione delle eccezioni di connessione è fondamentale per mantenere operazioni di database solide e affidabili. Gestite correttamente, queste eccezioni non solo aiutano a diagnosticare rapidamente i problemi, ma garantiscono anche che l'applicazione sia in grado di gestire correttamente le interruzioni temporanee della rete o l'indisponibilità del server, con conseguente miglioramento della stabilità e dell'esperienza utente. Alcune delle eccezioni critiche relative alla creazione di una connessione includono:
MongoException
— Un'eccezione generale che potrebbe essere emessa in vari scenari non coperti da eccezioni più specifiche. Assicurati che questa eccezione venga gestita dopo tutte le altre eccezioni specifiche poiché si tratta di un'eccezione catch-all MongoDB generale.MongoTimeoutException
— Emesso in caso di timeout di un'operazione. Ad esempio, interrogando un endpoint del cluster inesistente.MongoSocketException
— Rilasciato per problemi relativi alla rete. Ad esempio, disconnessione improvvisa della rete durante un'operazione.MongoSecurityException
— Emesso quando l'autenticazione fallisce. Ad esempio, connessione con credenziali errate.MongoConfigurationException
— Emesso in caso di errore nella configurazione del client. Ad esempio, utilizzando una stringa di connessione non valida.
Fase 5: Esecuzione del codice
Il seguente esempio di codice crea una connessione Amazon DocumentDB e stampa tutti i database:
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); } }
Le migliori pratiche di connessione
Di seguito sono riportate le best practice da considerare quando ci si connette ad Amazon DocumentDB con un driver Java MongoDB:
Chiudi sempre il tuo
MongoClient
quando non hai più bisogno che il client rilasci risorse. Gestisci le eccezioni in modo appropriato e implementa una corretta registrazione degli errori.
Utilizza variabili di ambiente o AWS Secrets Manager per archiviare informazioni sensibili come nomi utente e password.