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?
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.
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 .
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