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?
To connect to a replica set deployment, specify the hostname and port numbers of each instance, separated by commas, and the replica set name as the value of the replicaSet parameter in the connection string. In the following example, the hostnames are host1 , host2 , and host3 , and the port numbers are all 27017 .
You can access the configuration of a replica set using the rs. conf() method or the replSetGetConfig command.
Yes, DataNucleus JPA allows it, as well as to many other databases.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With