MongoClient构造函数不会引发任何与连接相关的异常。相反,它们在启动一个或多个尝试建立连接并基于提供的凭据进行身份验证的后台线程后立即返回。
仅当应用程序使用MongoClient在MongoDB服务器上执行某些 *** 作时,才会引发异常。但是,该异常是通用超时异常,指示驱动程序在服务器选择超时到期之前未能找到适合该 *** 作的服务器。例如:
MongoClient client = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27018")), singletonList(MongoCredential.createCredential("username","admin","bad".toCharArray())), MongoClientOptions.builder().serverSelectionTimeout(1000).build()); try { client.getDB("admin").command("ping"); } catch (MongoTimeoutException e) { // do something }
1秒后将引发MongoTimeoutException。虽然未引发MongoSecurityException,但MongoTimeoutException的消息将包含相关详细信息。例如,当其中一台服务器关闭时连接到三个成员的副本集时,其余两个服务器均未通过身份验证,则MongoTimeoutException的消息字段将类似于:
等待与ReadPreferenceServerSelector {readPreference =
primary}匹配的服务器时,在1000毫秒后超时。群集状态的客户端视图是{java.net。} {type = UNKNOWN,服务器=
[{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception =
{com.mongodb.MongoSocketOpenException:异常打开套接字}}。
ConnectException:连接被拒绝}},{地址=本地主机:27018,类型=未知,状态=连接,异常=
{com.mongodb.MongoSecurityException:认证MongoCredential {mechanism =
null,userName =’username’,source
=’admin’的异常,由{com.mongodb.MongoCommandException引起的,密码=,机制属性=
{}}}:命令失败,错误18:“身份验证失败”。在服务器localhost:27018上。完整的响应为{“ ok”:0.0,“ pre”:18,“
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)