web-dev-qa-db-fra.com

Comment configurer spring-data-mongodb pour utiliser un jeu de réplicas via les propriétés

Je suis en train d'écrire une application qui devrait utiliser un jeu de réplicas de MongoDB. Il s’agit d’une application basée sur Spring Boot et les propriétés suivantes fonctionnent parfaitement pour se connecter à un serveur:

spring.data.mongodb.Host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo

C'est absolument parfait pour mon environnement de développement local. Mais plus tard, il devrait fonctionner contre un jeu de réplicas MongoDB, je dois donc fournir au moins 2, 3 meilleures graines de jeu de réplicas, mais comment puis-je faire cela avec les propriétés?

J'ai jeté un coup d'oeil sur cette page: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html , mais il n'y a pas de propriété explicite pour le réplica ensembles mentionnés . Fournir une liste d'adresses séparées par des virgules, comme ceci:

spring.data.mongodb.Host=127.0.0.1,127.0.1.1,127.0.2.1
spring.data.mongodb.uri=mongo://127.0.0.1,mongo://127.0.0.1:27018

(J'ai essayé l'un après l'autre.)

Cela ne fonctionne pas non plus (en fait, cela produit une exception qui permet à Spring d’utiliser la configuration par défaut).

J'ai aussi essayé d'utiliser le fichier config.xml suivant, sans succès:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:context="http://www.springframework.org/schema/context"
          xmlns:mongo="http://www.springframework.org/schema/data/mongo"
          xsi:schemaLocation=
          "http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:27017,localhost:27018"/>

</beans>

Je sais que les configurations ci-dessus sont légèrement différentes, mais ce que j'essaie actuellement, c'est d'obtenir une exception qui me montre qu'aucun nœud de jeu de réplicas n'était accessible.

Des idées, des astuces?

15
incredibleholg

Il n'y a pas de soutien explicite pour cela, non. Mais vous devriez être capable de configurer cela très bien via le paramètre uri.

Nous avons effectivement mis à jour la documentation récemment.

13
Stephane Nicoll

J'ai eu un problème similaire et j'ai creusé dans le code MongoProperties::createMongoClient() et constaté que le code ignorait la valeur uri s'il y avait des valeurs configurées pour spring.data.mongodb.Host, spring.data.mongodb.port, spring.data.mongodb.username ou spring.data.mongodb.password

Si je mets toutes ces informations dans l'URI (et que je supprime toutes les autres valeurs spring.data.mongodb.* du fichier de propriétés), le code de connexion fonctionne. 

Le paramètre de propriété URI a finalement ressemblé à ceci:

mongodb://username:mypasswd@hostname1:27017,hostname2:27017,hostname3:27017/dbname

Les documents pour formater votre valeur URI sont ici .

11
nwolfe

Changez application.properties de ceci:

spring.data.mongodb.Host=server1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=system
spring.data.mongodb.database=database

...pour ça:

spring.data.mongodb.uri=mongodb://username:password@server1:port,server2:port/database
1
cepix