Reputation: 603
I am currently writing an application which should use a replica set of MongoDB. It is a Spring Boot based application and the following properties work perfectly fine to connect to one server:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo
This is absolutely fine for my local dev environment. But later on it should run against a MongoDB replica set, so I have to provide at least 2, better 3 replica set seeds, but how can I do this with properties?
I had a look on this page: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html, but there is no explicit property for replica sets mentioned. Providing a comma separated list of addresses like this:
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
(I tried one after another.)
This is also not working (in fact, it produces an exception which lets Spring uses the default configuration).
I also tried to use the following config.xml, with no luck:
<?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>
I know that the above configs are slightly different, but what I am currently trying is to get an exception which is showing me that no replica set node was reachable.
Any ideas, hints?
Upvotes: 32
Views: 71669
Reputation: 17095
additional-hosts
property added since spring boot 3.0.0-M5 as per this github issue.
spring:
data:
mongodb:
host: 0.0.0.1
port: 27017
additional-hosts: [0.0.0.2:12345, 0.0.0.3]
See description in spring boot common app properties.
Upvotes: 0
Reputation: 33111
There is no explicit support for that, no. But you should be able to configure that just fine via the uri
parameter.
We've actually updated the documentation recently.
Upvotes: 23
Reputation: 2729
Change application.properties from this:
spring.data.mongodb.host=server1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=system
spring.data.mongodb.database=database
...to this:
spring.data.mongodb.uri=mongodb://username:password@server1:port,server2:port/database
Upvotes: 9
Reputation: 266
I had a similar problem and I dug into the MongoProperties::createMongoClient()
code and found that the code was ignoring the uri value if there were any values configured for spring.data.mongodb.host
, spring.data.mongodb.port
, spring.data.mongodb.username
or spring.data.mongodb.password
.
If I put all that information in the URI (and removed all the other spring.data.mongodb.*
values from the property file), the connection code worked.
The URI property setting ended up looking like this:
mongodb://username:mypasswd@hostname1:27017,hostname2:27017,hostname3:27017/dbname
The docs for formatting your URI value are here.
Upvotes: 23