gpt4 book ai didi

java - 如果使用不同的方法连接,为什么 Mongo 不抛出异常?

转载 作者:行者123 更新时间:2023-11-29 09:26:55 24 4
gpt4 key购买 nike

我有一个问题,我需要 Mongo 在超时时抛出异常。问题是使用这种方式创建我的 MongoClient 它不会抛出异常:

String database = "database";
String username = "myUser;

String connectionStringValue = "mongodb://" + username + ":" + repository.getPassword() + "@"
+ "myHost" + ":" + "27027" + "/" + database
+ "?serverSelectionTimeoutMS=10000";

ConnectionString connectionString = new ConnectionString(connectionStringValue);

MongoClient client = MongoClients.create(connectionString);

一切正常。我可以连接数据库,添加文件等。但是当出现超时情况时,它不会抛出异常。相反,它返回一个空文档。

但是如果我使用这种方式连接:

MongoCredential credential = createCredentials(information);
ServerAddress serverAdress = new ServerAddress("myHost",
27027);
MongoClientOptions options = MongoClientOptions.builder().serverSelectionTimeout(10000).build();
return new MongoClient(serverAdress, credential, options);

话又说回来,一切正常,但在这里我得到了预期的超时,而不是空文档作为响应。我想知道我在这里遗漏了什么,以便在第一个案例超时后抛出异常。我需要使用第一种情况,因为我使用的是 com.mongodb.client.MongoClient 而不是 com.mongodb.MongoClient(第二种情况)。

谢谢!

最佳答案

使用connectionString连接mongodb时,尝试使用参数connectTimeoutMS=10000而不是 serverSelectionTimeoutMS=10000 ,我还会添加一个套接字超时:socketTimeoutMS=10000 ,所以你的完整连接 uri 将是:

String connectionStringValue = "mongodb://" + username + ":" + repository.getPassword() + "@"
+ "myHost" + ":" + "27027" + "/" + database
+ "?connectTimeoutMS=10000"
+ "&socketTimeoutMS=10000;

这是根据 mongodb 手册编写的,希望对您有所帮助。

关于java - 如果使用不同的方法连接,为什么 Mongo 不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com