MongoSocketOpenException - 连接到MongoDB时遇到的问题
问题描述:
这是我第一次尝试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)
答
看来你的MongoDB实例是不正确, 可以诊断通过直接运行命令mongo
或者你如果您使用的是Linux发行版,则可以使用nc -zv localhost 27017
。
如果您使用的是Windows,你可以尝试运行telnet 127.0.0.1 27017
看看端口是否打开,请注意telent
命令将不会被默认启用,启用您应该去控制面板软件和服务,启用telnet客户端。作为开发人员,您应该始终启用该功能,以诊断某些网络问题。
此外,还有一个ORM的驱动程序,我们觉得非常有用,并已投入生产环境多年,其包裹默认由官方供应商,它被称为 morphia
保持的MongoDB的Java驱动程序什么是你的OS如果您使用的是Linux,请尝试诊断mongodb的'27017'端口是否已打开,例如,您是否可以使用命令'mongo'连接到mongodb? – armnotstrong
使用Windows 10. – Realmm
检查答案以获得诊断端口“27017”是否用“telnet”打开的方法。手没有拿到窗户。 – armnotstrong