You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mongodb-driver-async连接MongoDB Atlas遇连接问题求助

解决mongodb-driver-async连接MongoDB Atlas的问题

核心问题分析

你遇到的连接问题主要源于驱动版本过旧、缺少SSL所需的Netty依赖以及使用了废弃的认证机制,以下是针对性的解决方案:


步骤1:升级驱动并添加必要依赖

你的mongodb-driver-async版本为3.0.4(2015年发布),严重落后于MongoDB Atlas的兼容要求,且缺少SSL连接必需的Netty依赖。更新为稳定的4.x版本并添加Netty:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-async</artifactId>
    <version>4.10.2</version> <!-- 推荐使用最新稳定版 -->
</dependency>
<!-- 异步驱动SSL连接必须依赖Netty -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.94.Final</version>
</dependency>

步骤2:使用正确的连接代码

使用MongoDB Atlas提供的mongodb+srv连接字符串(自动解析集群节点,无需手动列出所有shard),并配置Netty流工厂:

// 替换<password>为你的管理员密码
ConnectionString connectionString = new ConnectionString(
    "mongodb+srv://admin:<password>@ac-bq9egvn.1v58qfz.mongodb.net/?retryWrites=true&w=majority"
);

MongoClientSettings settings = MongoClientSettings.builder()
    .applyConnectionString(connectionString)
    .streamFactoryFactory(NettyStreamFactoryFactory.builder().build()) // 指定Netty作为流实现
    .build();

MongoClient mongoClient = MongoClients.create(settings);

// 验证连接(异步方式)
mongoClient.listDatabaseNames()
    .forEach(
        dbName -> System.out.println("已连接数据库: " + dbName),
        error -> System.err.println("连接失败: " + error.getMessage()),
        () -> System.out.println("连接成功!")
    );

针对你三次尝试的问题拆解

  1. 尝试1错误原因:
    3.x版本的异步驱动默认使用NIO2流,但SSL连接仅支持Netty作为底层传输,缺少Netty依赖导致报错。添加Netty并指定NettyStreamFactoryFactory即可解决,但更推荐直接升级驱动。

  2. 尝试2错误原因:
    MONGODB-CR认证机制已被MongoDB Atlas废弃,当前默认使用SCRAM-SHA-1/SCRAM-SHA-256,无需手动指定authMechanism;同时连接字符串未启用SSL,Atlas强制要求SSL连接。

  3. 尝试3错误原因:
    驱动版本过旧,不支持Atlas的部分协议,且同样缺少Netty依赖,导致连接超时/失败。


内容的提问来源于stack exchange,提问作者sealabr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:52:41