Mongodb - ReadPreferenceServerSelector选择的服务器

时间:2016-06-25 19:51:41

标签: java mongodb server

我是java和Mongodb(或任何数据库)的新手,我一直在构建这个java程序来测试连接。它应该只是简单地建立连接并列出所有现有的数据库名称。

Jun 25, 2016 3:35:06 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Jun 25, 2016 3:35:06 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Jun 25, 2016 3:35:06 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketWriteException: Exception sending message
    at com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:462)
    at com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:205)
    at com.mongodb.connection.CommandHelper.sendMessage(CommandHelper.java:89)
    at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
    at com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:83)
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:43)
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at com.mongodb.connection.SocketStream.write(SocketStream.java:75)
    at        com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:201)
... 7 more

com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {java.net.SocketException: Software caused connection abort: socket write error}}]

Process finished with exit code 0

Mongodb服务器已经启动。但是,当我运行此应用程序时,它会显示这些错误

line1→→
line2

这些意味着什么?我想设置ReadPreferenceServerSelector?但我在网上找不到任何相关文件。

1 个答案:

答案 0 :(得分:0)

在向Mongo发送请求时,会在内部使用ReadPreferenceServerSelector。在您的方案中,您无需详细说明。

对我来说重要的错误就是这个。链接的答案描述了为什么会出现此错误。但它不应该重复多次尝试。

  

Software caused connection abort: socket write error

  1. 您是否可以检查mongo是否在端口27017上运行并且可以通过命令行访问?
  2. 只需使用mongo-java-driver就足以让您运行这样的测试。只需确保jar版本与已安装的mongodb版本匹配。更好的想法是使用像tutorial中描述的maven之类的东西。
  3. 如果在尝试这些操作后错误仍然存​​在,请发布。