2017-08-03 35 views
0

这是我第一次尝试MongoDB,所以如果你们有任何提示,但是特别是我在建立连接时遇到困难,我会喜欢任何提示。罐子装载。MongoSocketOpenException - 连接到MongoDB时遇到的问题

这是我的堆栈跟踪:

[00:12:43 INFO]: Exception in monitor thread while connecting to server 127.0.0.1:27017 
com.mongodb.MongoSocketOpenException: Exception opening socket 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[GangWars-1.0-SNAPSHOT-shaded.jar:?] 
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[GangWars-1.0-SNAPSHOT-shaded.jar:?] 
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) [GangWars-1.0-SNAPSHOT-shaded.jar:?] 
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_91] 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[?:1.8.0_91] 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) ~[?:1.8.0_91] 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[?:1.8.0_91] 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[?:1.8.0_91] 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[?:1.8.0_91] 
    at java.net.PlainSocketImpl.connect(Unknown Source) ~[?:1.8.0_91] 
    at java.net.SocksSocketImpl.connect(Unknown Source) ~[?:1.8.0_91] 
    at java.net.Socket.connect(Unknown Source) ~[?:1.8.0_91] 
    at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[GangWars-1.0-SNAPSHOT-shaded.jar:?] 
    at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[GangWars-1.0-SNAPSHOT-shaded.jar:?] 
    ... 3 more 

这是我的代码(立即发生时的jar运行):

private void loadGangs() { 
    MongoDB.getIDs().forEach(id -> GangUtils.addGang(new Gang(id))); 
} 

我的MongoDB类:

public final class MongoDB { 

private static final String name = "data"; 
private static final MongoClient mongoClient = new MongoClient(); 

public static String getName() { 
    return name; 
} 

public static MongoDatabase getDatabase() { 
    return mongoClient.getDatabase(name); 
} 

public enum CollectionEnum { 
    GANG, DRUGS, COPS 
} 

public static MongoCollection<Document> getCollection(CollectionEnum collection) { 
    return getDatabase().getCollection(collection.name().toLowerCase()); 
} 

public static List<Integer> getIDs() { 
    List<Document> gangs = getCollection(CollectionEnum.GANG).find().into(new ArrayList<>()); 
    List<Integer> ids = new ArrayList<>(); 

    for (Document gang : gangs) { 
     Object object = gang.get("_id"); 

     if (!(object instanceof Document)) continue; 

     List<Document> idTags = (List<Document>) object; 

     for (Document id : idTags) { 
      ids.add(id.getInteger("_id")); 
     } 

    } 

    return ids; 
} 

public static int getNextID() { 
    int id = 0; 
    for (int i = 0; i >= getIDs().size(); i++) { 
     if (getIDs().get(i) != i) { 
      id = i; 
      break; 
     } 
     id++; 
    } 
    return id; 
} 

}

我是什么做错了? (我想在这里研究,但我无法找到与Java相关的任何事情来帮助我的MongoDB)

+0

保持的MongoDB的Java驱动程序什么是你的OS如果您使用的是Linux,请尝试诊断mongodb的'27017'端口是否已打开,例如,您是否可以使用命令'mongo'连接到mongodb? – armnotstrong

+0

使用Windows 10. – Realmm

+0

检查答案以获得诊断端口“27017”是否用“telnet”打开的方法。手没有拿到窗户。 – armnotstrong

回答

0

看来你的MongoDB实例是不正确, 可以诊断通过直接运行命令mongo 或者你如果您使用的是Linux发行版,则可以使用nc -zv localhost 27017

如果您使用的是Windows,你可以尝试运行telnet 127.0.0.1 27017看看端口是否打开,请注意telent命令将不会被默认启用,启用您应该去控制面板软件和服务,启用telnet客户端。作为开发人员,您应该始终启用该功能,以诊断某些网络问题。

此外,还有一个ORM的驱动程序,我们觉得非常有用,并已投入生产环境多年,其包裹默认由官方供应商,它被称为 morphia

相关问题