2017-08-03 1 views
0

C'est la première fois que j'essaie de faire quelque chose avec MongoDB, donc j'adorerais tous les conseils si vous en avez, mais en particulier, j'ai du mal à établir une connexion ... charges de pot.MongoSocketOpenException - problème avec la connexion à MongoDB

Ceci est mon stacktrace:

[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 

Ceci est mon code (se produit immédiatement lors de l'exécution jar):

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

Ma classe 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; 
} 

}

Que suis-je? mal faire? (J'ai essayé des recherches ici, mais je ne pourrais pas trouver quoi que ce soit associé à Java pour me aider avec MongoDB)

+0

ce qui est l'os que vous êtes si vous utilisez Linux, essayez de diagnostiquer si le port '27017' de mongodb a été ouvert, par exemple, pourriez-vous vous connecter à mongodb en utilisant la commande' mongo'? – armnotstrong

+0

Sous Windows 10. – Realmm

+0

Vérifiez la réponse pour obtenir un moyen de diagnostiquer si le port '27017' s'ouvre avec' telnet'. n'a pas eu de fenêtres par la main. – armnotstrong

Répondre

0

Il semble que votre instance MongoDB est pas correctement, vous pouvez diagnostiquer soit par exécuter directement la commande mongo ou vous pourrait utiliser nc -zv localhost 27017 si vous utilisez une distribution Linux. Si vous utilisez Windows, vous pouvez essayer d'exécuter telnet 127.0.0.1 27017 pour voir si le port s'ouvre, notez que la commande telent ne sera pas activée par défaut, pour permettre l'accès au panneau de configuration dans le logiciel et le service, Activer le client Telnet. En tant que développeur, vous devez toujours l'activer pour diagnostiquer certains problèmes de réseau.

De plus, il y a un pilote ORM Nous trouvons très utile et a mis dans un environnement de production pendant des années qui a été enveloppées par défaut MongoDB-java-pilote maintenu par le vendeur officiel, il est appelé morphia