Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Conexión a Amazon DocumentDB con un controlador Java de MongoDB
En esta sección se proporciona una step-by-step guía para conectarse a Amazon DocumentDB mediante controladores Java. Esto le permitirá empezar a integrar DocumentDB en sus aplicaciones Java.
Temas
Paso 1: Configuración del proyecto
Con Maven, cree un proyecto java:
mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Añada el controlador Java de MongoDB como una dependencia para el proyecto en su archivo 'pom.xml':
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>
Paso 2: Crea la cadena de conexión
La cadena de conexión de Amazon DocumentDB es esencial para establecer una conexión entre la aplicación y el clúster de DocumentDB. Esta cadena encapsula información crucial, como el punto final del clúster, el puerto, los detalles de autenticación y varias opciones de conexión. Para crear una cadena de conexión de DocumentDB, normalmente se empieza con el formato básico:
"mongodb://
username
:password
@cluster-endpoint:port/?[connection options]"
Deberá reemplazar «nombre de usuario» y «contraseña» por sus credenciales reales. Puede encontrar el punto final y el número de puerto de su clúster tanto en el AWS Management Console como a través del AWS CLI. Consulte Búsqueda de puntos de conexión de un clúster para encontrar el punto final del clúster para su clúster. El puerto predeterminado de DocumentDB es 27017.
Ejemplos de cadenas de conexión
Realizar una conexión a DocumentDB mediante cifrado en tránsito y asegurarse de que las solicitudes de lectura vayan a las réplicas de lectura y escriban a la principal:
"mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
Realizar una conexión a DocumentDB mediante la autenticación de IAM:
"mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"
Las diferentes opciones disponibles para la cadena de conexión son las siguientes:
Certificado TLS
tls=true|false
— Esta opción activa o desactiva la seguridad de la capa de transporte (TLS). De forma predeterminada, el cifrado en tránsito está habilitado en el clúster de Amazon DocumentDB y, por lo tanto, a menos que TLS esté deshabilitado en el nivel del clúster, el valor de esta opción debería ser. true
Cuando se utiliza TLS, el código debe proporcionar un certificado SSL al crear la conexión a un clúster de DocumentDB. Descargue el certificado necesario para realizar la conexión segura al clúster:. global-bundle.pem
global-bundle.pem
archivo.
Opción 1: Extraiga todos los certificados del
global-bundle.pem
archivo y use la herramienta clave de Java para almacenarlos en un.jks
archivo que luego se pueda usar en el código. Consulte la pestaña Java Conexión con TLS habilitado para ver el script que muestra cómo hacerlo.Opción 2: añadir dinámicamente el
global-bundle.pem
archivo al código, crear un almacén de claves en memoria y utilizarloSSLContext
para proporcionar el certificado como parte de la conexión.
Lectura de réplicas leídas
replicaSet=rs0&readPreference=secondaryPreferred
— Al especificar estas dos opciones, se redirigen todas las solicitudes de lectura a las réplicas de lectura y las solicitudes de escritura a la instancia principal. El uso replicaSet=rs0
en la cadena de conexión permite que el controlador MongoDB mantenga una vista actualizada automáticamente de la topología del clúster, lo que permite a las aplicaciones mantener la visibilidad de las configuraciones de nodos actuales a medida que se agregan o eliminan instancias. Si no se proporcionan estas opciones ni se especifican, se readPreference=primary
envían todas las lecturas y escrituras a la instancia principal. Para ver más opcionesreadPreference
, consulteOpciones de preferencia de lectura.
Escribe tu preocupación y lleva un diario
Write concern determina el nivel de reconocimiento solicitado a la base de datos para las operaciones de escritura. Los controladores MongoDB ofrecen una opción para ajustar los archivos de escritura, preocupaciones y diarios. Amazon DocumentDB no espera que establezca write concern y journal, e ignora los valores enviados para w
y j
(y)writeConcern
. journal
DocumentDB siempre escribe los datos conwriteConcern
: majority
yjournal
: true
por lo que las escrituras se graban de forma duradera en la mayoría de los nodos antes de enviar un acuse de recibo al cliente.
RetryWrites
retryWrites=false
— DocumentDB no admite escrituras reintentables y, por lo tanto, este atributo siempre debe estar establecido en. false
Autenticación de IAM
authSource=%24external
y authMechanism=MONGODB-AWS
— Estos dos parámetros se utilizan para autenticar mediante. AWS Identity and Access Management Actualmente, la autenticación de IAM solo está disponible en la versión 5.0 del clúster basado en instancias. Para obtener más información, consulte Autenticación mediante la identidad de IAM.
Grupo de conexiones
Están disponibles estas opciones para la agrupación de conexiones:
maxPoolSize
— Establece el número máximo de conexiones que se pueden crear en el grupo. Cuando todas las conexiones están en uso y llega una nueva solicitud, espera a que haya una conexión disponible. El valor predeterminado para los controladores Java de MongoDB es 100.minPoolSize
— Indica el número mínimo de conexiones que deben mantenerse en el pool en todo momento. El valor predeterminado para los controladores Java de MongoDB es 0.maxIdleTimeMS
— Determina cuánto tiempo puede permanecer inactiva una conexión en el grupo antes de ser cerrada y eliminada. El valor predeterminado para los controladores Java de MongoDB es de 100 milisegundos.waitQueueTimeoutMS
— Configura cuánto tiempo debe esperar un subproceso para que una conexión esté disponible cuando el grupo está en su tamaño máximo. Si una conexión no está disponible dentro de este tiempo, se produce una excepción. El valor predeterminado para los controladores Java de MongoDB es 120 000 milisegundos (2 minutos).
Parámetros de tiempo de espera de conexión
El tiempo de espera es un mecanismo para limitar el tiempo que puede tardar una operación o un intento de conexión antes de que se considere fallido. Los siguientes parámetros de tiempo de espera están disponibles para evitar esperas indefinidas y administrar la asignación de recursos:
connectTimeoutMS
— Configura cuánto tiempo esperará el controlador para establecer una conexión con el clúster. El valor predeterminado es de 10 000 milisegundos (10 segundos).socketTimeoutMS
— Especifica cuánto tiempo esperará el controlador para recibir una respuesta del servidor para una operación que no sea de escritura. El valor predeterminado es 0 (sin tiempo de espera o es infinito).serverSelectionTimeoutMS
— Especifica cuánto tiempo esperará el controlador para encontrar un servidor disponible en el clúster. El valor predeterminado de esta configuración es de 30 segundos y es suficiente para que se elija una nueva instancia principal durante la conmutación por error.
Paso 3: Escribe el código de conexión
El siguiente ejemplo de código muestra cómo establecer una conexión TLS a Amazon DocumentDB:
Crea los objetos
KeyStore
y SSLContext
>de Java. También crea el
MongoClientSettings
objeto pasándolo al ConnectionString
objeto. Para establecer una conexión TLS, debe usar el MongoClientSettings
objeto para vincular el enlaceconnectionstring
ysslcontext
.Al usar
MongoClients
se obtiene un MongoClient
objeto.
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); } }
Paso 4: Gestionar las excepciones de conexión
Cuando se trabaja con DocumentDB en aplicaciones Java, el manejo de las excepciones de conexión es crucial para mantener operaciones de base de datos sólidas y confiables. Si se gestionan adecuadamente, estas excepciones no solo ayudan a diagnosticar los problemas rápidamente, sino que también garantizan que la aplicación pueda gestionar sin problemas las interrupciones temporales de la red o la falta de disponibilidad del servidor, lo que mejora la estabilidad y la experiencia del usuario. Algunas de las excepciones más importantes relacionadas con el establecimiento de la conexión son las siguientes:
MongoException
— Es una excepción general y podría emitirse en varios escenarios no cubiertos por excepciones más específicas. Asegúrese de que esta excepción se gestione después de todas las demás excepciones específicas, ya que se trata de una excepción general de MongoDB.MongoTimeoutException
— Se emite cuando se agota el tiempo de espera de una operación. Por ejemplo, al consultar un punto final de un clúster que no existe.MongoSocketException
— Emitido por problemas relacionados con la red. Por ejemplo, una desconexión repentina de la red durante una operación.MongoSecurityException
— Se emite cuando se produce un error en la autenticación. Por ejemplo, al conectarse con credenciales incorrectas.MongoConfigurationException
— Se emite cuando hay un error en la configuración del cliente. Por ejemplo, si se utiliza una cadena de conexión no válida.
Paso 5: ejecutar el código
El siguiente ejemplo de código crea una conexión Amazon DocumentDB e imprime todas las bases de datos:
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); } }
Prácticas recomendadas de conexión
Las siguientes son prácticas recomendadas que se deben tener en cuenta al conectarse a Amazon DocumentDB con un controlador Java de MongoDB:
Cierre siempre el suyo
MongoClient
cuando ya no necesite que el cliente libere recursos. Gestione las excepciones de forma adecuada e implemente un registro de errores adecuado.
Utilice variables de entorno o AWS Secrets Manager almacene información confidencial, como nombres de usuario y contraseñas.