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

部署在EC2的Spring Boot应用连接AWS DocumentDB超时问题

解决EC2到同一VPC内DocumentDB的连接超时问题

优先排查网络与安全组配置

  • 检查DocumentDB安全组规则:确保DocumentDB的安全组(sg-056d8***75f70ff1)入站规则允许EC2实例的流量访问27017端口。
    操作步骤:进入AWS控制台的DocumentDB集群页面,找到对应安全组,编辑入站规则,添加自定义TCP规则,端口设为27017,来源选择EC2实例的安全组ID,或者EC2的私有IP段。
  • 验证EC2出站规则:确认EC2实例的安全组允许出站访问27017端口(默认全出站规则可跳过此步)。
  • 测试端口连通性:在EC2实例上执行以下命令,直接验证网络连通性:
    # 使用telnet测试
    telnet mongodb.ceupui6czrsm.us-east-1.docdb.amazonaws.com 27017
    # 或使用nc命令
    nc -zv mongodb.ceupui6czrsm.us-east-1.docdb.amazonaws.com 27017
    
    若连接失败,说明网络层面存在阻塞,需进一步检查VPC路由表(确保同VPC内路由正常)和网络ACL(无拒绝流量的规则)。

修复证书加载逻辑

你的代码通过类加载器读取证书,但证书文件放在EC2实例的jar包同目录,类加载器默认读取jar内部资源,会导致证书找不到(可能掩盖真实的SSL握手问题,表现为超时)。修改证书读取逻辑为直接读取本地文件:

private static X509Certificate createCertificate() throws Exception {
    final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
    File certFile = new File(SSL_CERTIFICATE);
    if (!certFile.exists()) {
        throw new Exception("SSL证书文件不存在:" + SSL_CERTIFICATE);
    }
    try (FileInputStream is = new FileInputStream(certFile)) {
        return (X509Certificate) certFactory.generateCertificate(is);
    }
}

也可以将证书打包到jar的resources目录下,保持原类加载器读取逻辑。

修正代码配置错误

  • 连接池配置写法错误:原代码中applyToConnectionPoolSettings未正确修改配置,应改为:
    .applyToConnectionPoolSettings(connPoolBuilder -> 
        connPoolBuilder.maxSize(1)
    )
    
  • 延长连接超时时间:当前socket连接超时为10秒,可适当延长至30秒:
    .applyToSocketSettings(builder -> 
        builder.connectTimeout(30, TimeUnit.SECONDS)
    )
    
  • 核对用户名拼写:注意到配置的用户名为admininstrator(多了一个i),确认DocumentDB的实际用户名是否一致,避免认证失败导致的连接异常。

其他排查点

  • 确认DocumentDB实例状态为available,无维护或重启操作。
  • 检查VPC子网配置,确保EC2与DocumentDB所在子网的路由策略允许同AZ内实例通信。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:25:29