java 如何解决错误:ReadPreferenceServerSelector未选择任何服务器

vwhgwdsa  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(455)

我对Java和MongoDB(或任何数据库)都很陌生,我一直在编写这个Java程序来测试连接,它应该只是简单地建立连接并列出所有现有的数据库名称。

import com.mongodb.MongoClient;

import com.mongodb.client.MongoCursor;

public class test {
    public static void main(String[] args) {
        try{
            MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

            MongoCursor<String> dbsCursor = mongoClient.listDatabaseNames().iterator();
            while(dbsCursor.hasNext()) {
                System.out.println(dbsCursor.next());
            }

        }catch(Exception e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        }
    }
}

MongoDB服务器已经启动,但是当我运行这个应用程序时,它显示了如下错误

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

这意味着什么?我应该设置ReadPreferenceServerSelector吗?但是我在网上找不到任何相关的文档。

xqnpmsa8

xqnpmsa81#

ReadPreferenceServerSelector是在向Mongo发出请求时内部使用的,在您的场景中,您不需要深入了解这个细节。
对我来说重要的错误是这样的。链接的答案描述了为什么这个错误可能会出现。但它不应该在多次尝试中重复。
Software caused connection abort: socket write error
1.你能检查一下mongo是否运行在27017端口上并且可以通过命令行访问吗?
1.简单地使用mongo-java-driver就足以运行这样的测试了,只要确保jar版本与安装的mongodb版本匹配,更好的办法是使用类似maven的东西,如tutorial中所述。
如果尝试这些操作后错误仍然存在,请发布。

相关问题