J'ai supposé que cette question avait été posée plusieurs fois mais j'ai dû la reconsidérer. Parce que les solutions apportées à cette question ne m'ont pas donné de réponse exacte pour me débarrasser de cette sanglante erreur.
J'utilise mongo-Java-driver-2.12.4
et mongo.jar
lorsque j'essaie d'insérer un document dans la base de données, j'obtiens l'erreur suivante. Toute aide est appréciée.
Erreur :
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting to connect. Client view of cluster state is {type=Unknown, servers=[{address=127.0.0.1:27000, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}, {address=127.0.0.1:27001, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}, {address=127.0.0.1:27002, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {Java.net.ConnectException: Connection refused: connect}}]
at com.mongodb.BaseCluster.getDescription(BaseCluster.Java:128)
Code:
public class MongoDbConnectDatabase {
public static void main(String[] args) {
// To connect to mongodb server
try {
List<ServerAddress> lstServer = new ArrayList<ServerAddress>();
lstServer.add(new ServerAddress("127.0.0.1", 27000));
lstServer.add(new ServerAddress("127.0.0.1", 27002));
lstServer.add(new ServerAddress("127.0.0.1", 27001));
MongoClient mongoClient = new MongoClient(lstServer);
// Now connect to your database
DB db = mongoClient.getDB("test");
System.out.println("connect to database successfully");
DBCollection coll = db.createCollection("mycol", null);
System.out.println("Collection created successfully");
DBCollection colReceived= db.getCollection("mycol");
System.out.println("Collection mycol selected successfully");
BasicDBObject doc = new BasicDBObject("title", "MongoDB").
append("description", "database").
append("likes", 100).
append("url", "http://www.tutorialspoint.com/mongodb/").
append("by", "tutorials point");
colReceived.insert(doc);
System.out.println("Document inserted successfully");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Vous obtenez une connexion refusée. Êtes-vous sûr que mongod fonctionne?
Essayez de vous connecter avec mongoclient:
mongo 127.0.0.1:27000/test
et cela pour les trois instances (27000, 27002, 27001).
Si vous avez également des problèmes avec mongoclient, vérifiez vos journaux.
une autre raison de cette erreur peut être que la version du pilote mongo-Java n'est pas compatible avec votre application mongo. Mon cas: j'utilisais mongo-Java-driver version 2.12.3 avec mongo 3.0.8 -> ne fonctionne pas. ( https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#reference-compatibility-mongodb-Java )
ici toutes les raisons possibles de cette erreur sont répertoriées. Dans mon cas, il était dû à une réplique non initialisée. Initialisez le jeu de réplicas à l'aide de rs.initiate()
. Dans mon cas, j'ai utilisé le volume créé à partir des données de production et l'ai utilisé dans la mise en scène. Étant donné que la base de données local
avait une ancienne configuration de réplicaset, elle n'a pas pu devenir PRIMARY. J'ai fait la chose suivante pour le rendre PRIMAIRE:
>use local
> db.dropDatabase();
{ "dropped" : "local", "ok" : 1 }
> rs.initiate()
>myrepl:PRMIARY
Maintenant, le client a pu se connecter et effectuer des opérations de lecture/écriture.