Can't connect to local monogoDB de java
- Environnement: mac os x 10.10
- MongoDB version: 3.0.5
- JDK version: 1.8
- MongoDB pilote: "mongo-java-driver-3.0.2.jar" et
"mongodb-driver-async-3.0.2.jar"
Problème:
Je veux me connecter mongoDB et insérer des données simples en mode asynchrone,j'ai donc utilisé "mongodb-driver-async-3.0.2.jar". Mais je trouve que je n'ai pas de connecter la base de données.Le Code est comme suit:
public static void main(String[] args) {
//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!");
}
};
//get a handle to the "test" collection
MongoCollection<Document> collection = database.getCollection("test");
collection.insertOne(new Document("lala","hehe"),callbackWhenFinished);
}
Je suis sûr que j'ai commencé le service de base de données à l'adresse 127.0.0.1:27017, et avec la coquille et non-méthode asynchrone peut être connecté.
Erreur:
Pas de serveur choisi par PrimaryServerSelector de cluster description
ClusterDescription{type=INCONNU, connectionMode=CÉLIBATAIRE,
tous les=[ServerDescription{adresse=localhost:27017, type=INCONNU,
etat=CONNEXION}]}. D'attente pour 30000 ms avant l'expiration du délai
Je pense que vous n'avez pas commencé votre serveur mongoDB, essayez de le démarrer avant de se connecter à la base de données par le biais du programme
OriginalL'auteur | 2015-08-11
Vous devez vous connecter pour publier un commentaire.
J'ai couru votre code à l'encontre de ma propre (en cours) serveur MongoDB, et je peux voir la même erreur. Ce qui m'a frappé était bien que le message d'erreur indique "en Attente 30000ms avant l'expiration du délai", mais le code se termine en moins de 30 secondes. Cela donne un indice quant à ce qu'est la question.
Rappelez-vous ceci est asynchrone, par conséquent, vous ne pouvez pas attendre de toutes les opérations à exécuter séquentiellement sur le même thread. Ce qui se passe réellement est la
main
méthode est la finition avant votre appel à la base de données de finitions.Si vous modifiez votre code d'attendre les résultats de revenir avant de terminer, vous obtenez un beaucoup plus raisonnable résultat.
Code:
Résultat:
Par ailleurs, le code peut être simplifié, puisque vous dites que vous êtes à l'aide de Java 8:
OriginalL'auteur Trisha
Vérifier la version compatibity de Mongo-java-pilote et Mongodb-Pilote-Async
Dans mon cas, j'ai utilisé Mongo-java-pilote-3.4.0
et mongodb-pilote-async-3.0.4
Il a résolu le problème.
OriginalL'auteur Anupam Mahapatra