Как настроить spring -data-mongodb для использования набора реплик через свойства

В настоящее время я пишу приложение, которое должно использовать набор реплик MongoDB. Это приложение Spring Boot, и следующие свойства прекрасно работают для подключения к одному серверу:

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

Это абсолютно нормально для моей локальной среды. Но позже он должен работать против набора реплик MongoDB, поэтому я должен предоставить как минимум 2, лучше 3 набора семпла реплики, но как это сделать со свойствами?

Я посмотрел на эту страницу: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html, но нет явного свойства для упомянутых наборов реплик. Предоставление списка адресов, разделенных запятыми:

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

(Я пробовал один за другим.)

Это также не работает (на самом деле он создает исключение, которое позволяет Spring использовать конфигурацию по умолчанию).

Я также попытался использовать следующий config.xml, без везения:

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

Я знаю, что приведенные выше конфиги немного отличаются, но то, что я сейчас пытаюсь сделать, - это получить исключение, которое показывает мне, что набор реплик node недоступен.

Любые идеи, подсказки?

Ответ 1

Нет явной поддержки этому, нет. Но вы должны быть в состоянии настроить это просто с помощью параметра uri.

Мы недавно обновили документацию.

Ответ 2

У меня была похожая проблема, и я MongoProperties::createMongoClient() в MongoProperties::createMongoClient() и обнаружил, что код игнорировал значение uri, если были какие-либо значения, настроенные для spring.data.mongodb.host, spring.data.mongodb.port, spring.data.mongodb.username или spring.data.mongodb.password.

Если я поместил всю эту информацию в URI (и удалил все остальные значения spring.data.mongodb.* Из файла свойств), код подключения сработал.

Настройка свойства URI в итоге выглядела так:

mongodb://username:[email protected]:27017,hostname2:27017,hostname3:27017/dbname

Документы для форматирования вашего значения URI находятся здесь.

Ответ 3

Измените application.properties из этого:

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

...к этому:

spring.data.mongodb.uri=mongodb://username:[email protected]:port,server2:port/database