我有一个问题,我需要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(第二种情况)。
谢谢!
答案 0 :(得分:0)
在使用connectionString连接到mongodb时,请尝试使用参数connectTimeoutMS=10000
而不是serverSelectionTimeoutMS=10000
,我还要添加一个套接字超时:socketTimeoutMS=10000
,因此您的完整连接uri将是:
String connectionStringValue = "mongodb://" + username + ":" + repository.getPassword() + "@"
+ "myHost" + ":" + "27027" + "/" + database
+ "?connectTimeoutMS=10000"
+ "&socketTimeoutMS=10000;
这是根据mongodb的手册,希望对您有所帮助。