MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Nie można połączyć się z lokalną mongoDB z java

Uruchomiłem twój kod na moim własnym (działającym) serwerze MongoDB i widzę ten sam błąd. Uderzyło mnie jednak to, że błąd mówi „Oczekiwanie 30000 ms przed przekroczeniem limitu czasu”, ale kod kończy się w znacznie mniej niż 30 sekund. Daje to wskazówkę, na czym polega problem.

Pamiętaj, że jest to asynchroniczne — dlatego nie można oczekiwać, że wszystkie operacje będą wykonywane sekwencyjnie w tym samym wątku. To, co się właściwie dzieje, to main metoda kończy się przed zakończeniem wywołania bazy danych.

Jeśli zmienisz kod, aby poczekać na powrót wyników przed zakończeniem, uzyskasz znacznie bardziej rozsądny wynik.

Kod:

public static void main(String[] args) throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    // connect to the local database server,default:127.0.0.1:27017
    MongoClient mongoClient = MongoClients.create();
    // get handle to "testDB" database
    MongoDatabase database = (MongoDatabase) mongoClient.getDatabase("testDB");
    SingleResultCallback<Void> callbackWhenFinished = new SingleResultCallback<Void>() {
        @Override
        public void onResult(final Void result, final Throwable t) {
            System.out.println("Operation Finished!");
            latch.countDown();
        }
    };
    // get a handle to the "test" collection
    MongoCollection<Document> collection = database.getCollection("test");
    collection.insertOne(new Document("lala", "hehe"), callbackWhenFinished);

    latch.await();
}

Wynik:

Aug 11, 2015 9:31:34 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:1, serverValue:4}] to localhost:27017
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=1281647}
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:2, serverValue:5}] to localhost:27017
Operation Finished!

Nawiasem mówiąc, kod można jeszcze bardziej uprościć, zwłaszcza że mówisz, że używasz Javy 8:

public static void main(String[] args) throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    // connect to the local database server,default:127.0.0.1:27017
    MongoClient mongoClient = MongoClients.create();
    // get handle to "testDB" database
    MongoDatabase database = mongoClient.getDatabase("testDB");
    // get a handle to the "test" collection
    MongoCollection<Document> collection = database.getCollection("test");

    collection.insertOne(new Document("lala", "hehe"),
                         (result, t) -> {
                             System.out.println("Operation Finished!");
                             latch.countDown();
                         });

    latch.await();
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zrozumienie indeksów MongoDB

  2. Dodatkowe pola Mongo dbref są niewidoczne w mongoshell. Jak je wyświetlić?

  3. Jak uzyskać maksymalne i minimalne daty w zbiorze dokumentów za pomocą pakietu jenssegers/laravel-mongodb?

  4. Jaki jest maksymalny rozmiar GridFS w MongoDB?

  5. jak używać MongoDB do przechowywania wiadomości ejabberd?