我有一个问题,我需要 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/