有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MongoSocketOpenException连接到MongoDB时出现问题

这是我第一次在MongoDB上尝试任何东西,所以如果你们有任何建议,我都会喜欢,但特别是,我在建立连接时遇到了困难。。。这个错误发生在jar加载时

这是我的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

这是我的代码(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)


共 (1) 个答案

  1. # 1 楼答案

    我知道这个帖子是9个月,但这可以帮助其他人。 我也有同样的问题:问题是,不幸的是,对于de.flapdoodle.embed.mongo依赖项,我已经test作为scope解决了问题,只是让它成为默认值(compile),通过注释scope解决了问题

    <dependency>
       <groupId>de.flapdoodle.embed</groupId>
       <artifactId>de.flapdoodle.embed.mongo</artifactId>
        <!  <scope>test</scope>   >
    </dependency>
    

    compile是maven的默认范围。构建、测试和运行项目需要具有compile范围的依赖项。 构建和运行项目不需要test范围的依赖项,而需要编译和运行单元测试。 因此,以test为作用域的依赖项将不会附加到构建过程的jar/war结果,并且在我们运行项目时,所包含的类和其他资源不可用
    see here for more information about maven scopes