4
votes

Java Spring / MongoDb ne fonctionne que lors de l'utilisation du champ URI

J'ai une situation très étrange. J'exécute une application Java Spring-Boot qui se connecte à une instance MongoDb. Lorsque j'utilise le champ

spring.data.mongodb.uri = mongodb: // {username}: {password} @ {host}

, je me connecte bien. Mais lorsque j'utilise:

spring.data.mongodb.authentication-database={auth-db}
spring.data.mongodb.database={mydb}

j'obtiens un échec d'authentification. Ce qui donne? Bien sûr, les valeurs entre accolades sont exactement les mêmes.

J'ai inclus ces valeurs dans les deux paramètres:

spring.data.mongodb.host={host}
spring.data.mongodb.username={username}
spring.data.mongodb.password={password}

Autres détails

La méthode non-uri fonctionne dans un seul environnement, mais pas celui que j'essaie de réparer.

Exécution des deux serveurs dans le même Docker Swarm

Mongo ReplicaSet version 4.0.4

Java 8


8 commentaires

Avez-vous essayé de diviser l'hôte et le port dans spring.data.mongodb.port = ? D'après la documentation, il semble que l'hôte et le port soient attendus: docs.spring.io/spring-boot/docs/current/reference/html/...


Je n'ai pas ajouté le port car c'est juste par défaut (27017).


Vous avez raison, il dit que Si spring.data.mongodb.port n'est pas spécifié, la valeur par défaut de 27017 est utilisée. Vous pouvez supprimer cette ligne de l'exemple ci-dessus. . J'ai manqué cette partie au départ.


Le formulaire URL de l'utilisateur ou du mot de passe contient-il des caractères% ou +?


Nan! le nom d'utilisateur et le mot de passe ne sont que des chiffres et des lettres. le nom d'hôte a un "."


Pouvez-vous ajouter l'URI complet? votre fichier de propriété comprend-il à la fois une base de données d'authentification et une base de données d'application? Quel est le mécanisme d'authentification que vous utilisez? Serait-il possible pour vous de créer un projet github?


Je ne peux pas vraiment ajouter l'URI complet car il appartient à mon employeur. AUSSI, je dois mentionner que cela fonctionne dans un environnement mais pas dans l'autre.


Quelle est la version à démarrage à ressort?


3 Réponses :


0
votes

Je ne peux pas faire de commentaire alors je dois répondre.

Essayez d'ajouter le nom de votre base de données? J'espère que ça marche. spring.data.mongodb.database =


4 commentaires

Je l'ai essayé sans succès. Remarquez que je ne l'ai pas encore ajouté à l'URI, je peux toujours me connecter.


Si je quitte la base de données, j'obtiens un échec d'authentification. Mais j'ai plusieurs bases de données.


Ça a du sens. Je l'ai essayé avec la configuration de la base de données et de la base de données d'authentification. Échec de l'authentification toujours.


Avez-vous déjà lu docs.spring. io / spring-boot / docs / current / reference / html /… . 31.2.1 Connexion à une base de données MongoDB.



1
votes

Il semble que cela ne soit plus pris en charge. Citant de docs.spring.io - 31.2.1 Connexion à une base de données MongoDB :

Si vous utilisez le pilote Java Mongo 3.0, spring.data.mongodb.host et spring.data.mongodb.port ne sont pas pris en charge. Dans ces cas, spring.data.mongodb.uri doit être utilisé pour fournir tous les configuration.


4 commentaires

Les documents sont incorrects. Je peux me connecter très bien en utilisant les conventions .host et .port sur mon environnement inférieur. C'est mon environnement supérieur (configuration identique, en utilisant exactement la même image de docker) qui ne fonctionnera pas.


@SedkyA, il semble que votre base de données ne soit pas accessible depuis votre "environnement supérieur".


@SedkyA, pouvez-vous détailler ce que signifie un environnement supérieur?


C'est essentiellement un environnement avec plus de nœuds dans l'essaim. Ce n'est pas pertinent, tout cela signifie que c'est un autre environnement avec exactement la même architecture. L'un auquel je peux me connecter en utilisant host / user / pwd, l'autre je dois utiliser l'URI



0
votes

Essayez ceci

spring.data.mongodb.host={host}
spring.data.mongodb.port={port}
spring.data.mongodb.username={username}
spring.data.mongodb.password={password}
spring.data.mongodb.database={database}

Cela fonctionne pour moi.


0 commentaires