java客户端连接MongoDB失败的问题(超时,mongo启动失败等)

在学习mongodb的过程中,碰见两个问题,在此记录一下。

1. java客户端连接mongodb超时问题。

报错信息:com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=47.94.98.106:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.SocketTimeoutException}}]

分析:

  1. 首先检查mongodb所在的服务器地址和端口号有没有写错。
  2. 检查本地是否能ping通mongo的服务器地址
  3. 前两步都没问题,然后检查本地能否telnet通mongo。例如:我的是windows系统。在命令行中,telnet 47.94.98.106 27017,如果telnet不同,则说明可能是服务器的27017端口没对外开放,则需要打开该端口的防火墙。

2. 云服务器中启动mongo启动失败

报错信息:

 options: { config: "../mongodb.cfg", net: { bindIp: "47.94.98.106", port: 27017 }, processManagement: { fork: true }, storage: { dbPath: "/data/mongodb/db" }, systemLog: { destination: "file", logAppend: true, path: "/data/mongodb/logs/mongodb.log" } }
Failed to set up listener: SocketException: Cannot assign requested address

分析:

这个是因为mongodb.cfg中的bind_id地址的问题。具体如下

如上图所示,用的是阿里的ECS云服务器,其中有两个ip,一个是公网的,一个是内网私有的ip。

报错原因是在mongodb.cfg配置文件中填写的 bind_id=47.94.98.106,导致Failed to set up listener: SocketException: Cannot assign requested address。

解决方法:把bind_id改为私有地址或者直接 0.0.0.0即可解决。

注意:使用客户端连接的时候,mongodb的连接地址是服务器的公网ip。

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java连接MongoDB并设置连接超时,你可以使用MongoDB的官方Java驱动程序,也称为MongoDB Java Driver。以下是一个示例代码,展示了如何连接MongoDB并设置连接超时: ```java import com.mongodb.MongoClient; import com.mongodb.MongoClientOptions; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.MongoDatabase; public class MongoDBConnection { public static void main(String[] args) { // 设置MongoDB服务器地址和端口号 ServerAddress serverAddress = new ServerAddress("localhost", 27017); // 设置MongoDB连接选项 MongoClientOptions options = MongoClientOptions.builder() .connectTimeout(5000) // 连接超时时间为5秒 .build(); // 设置MongoDB凭据(可选) MongoCredential credential = MongoCredential.createCredential("username", "database", "password".toCharArray()); // 创建MongoClient对象 MongoClient mongoClient = new MongoClient(serverAddress, credential, options); // 获取数据库 MongoDatabase database = mongoClient.getDatabase("your_database_name"); // 打印数据库名称 System.out.println("Connected to database: " + database.getName()); // 关闭连接 mongoClient.close(); } } ``` 在上面的代码中,我们首先创建了一个`ServerAddress`对象,用于指定MongoDB服务器的主机名和端口号。然后,我们使用`MongoClientOptions`来设置连接超时时间为5秒,并通过调用`build()`方法构建选项。 如果你需要进行身份验证,可以使用`MongoCredential`对象来设置用户名、数据库名称和密码。 最后,我们使用上述设置创建了一个`MongoClient`对象,并通过`getDatabase`方法获取连接的数据库。打印数据库名称后,我们关闭了连接。 请注意,你需要将`localhost`替换为你实际使用的MongoDB服务器地址,`27017`替换为你实际使用的端口号,以及`your_database_name`替换为你要连接的数据库名称。如果不需要身份验证,可以将`MongoCredential`相关的代码删除或注释掉。 希望这个示例能帮助你连接MongoDB并设置连接超时。如果你有更多问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值