Подключение реплики MongoDB только для чтения Вторичный от загрузочного приложения Spring - PullRequest
0 голосов
/ 09 мая 2018

Мы получили набор реплик mongodb с тремя узлами (скажем, A, B, C). Когда A и B выключены, mongo делает узел C доступным только для чтения (что здорово!)

Наше требованиекогда доступен только доступный только для чтения узел (без основного), приложение должно продолжать работать в режиме только для чтения.

Если я использую библиотеку java MongoClient с опцией подключения клиента mongo ? ReadPreference = primaryPreferred , клиентская программа может подключаться к mongo и читать данные с вторичного узла только для чтения (запись не ожидается, как ожидается).

Но если я попробую то же самое из загрузочного приложения Spring, то при загрузке приложения Mongo Client не сможет подключиться к доступному вторичному серверу, доступному только для чтения, ошибка tt выдает ниже ошибки.Есть ли какой-либо параметр, который я могу передать дополнительно в загрузочном приложении Spring, чтобы приложение знало, что ему необходимо подключиться к вторичному доступу только для чтения?

----- application.properties ----

spring.data.mongodb.uri = mongodb: //10.9.9.71: 27017,10.9.9.71: 27018,10.9.9.71: 27019 /? readPreference = secondPreferred

Любая помощь будет принята с благодарностью.

Ошибка вызова метода init;Вложенное исключение - org.springframework.dao.DataAccessResourceFailureException: Превышено время ожидания после 30000 мс в ожидании сервера, который соответствует WritableServerSelector.Клиентское представление состояния кластера: {тип = REPLICA_SET, серверы = [{адрес = 10.9.9.71: 27018, тип = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ, исключение = {com.mongodb.MongoSocketOpenException: сокет открытия исключения}, вызванный {java.net.ConnectException: соединение отклонено (соединение отклонено)}}, {адрес = 10.9.9.71: 27017, тип = UNKNOWN, состояние = CONNECTING, исключение = {com.mongodb.MongoSocketOpenException: сокет открытия исключительной ситуации}, вызванный {java.net.ConnectException: Соединение отклонено (Соединение отклонено)}}, {адрес = 10.9.9.71: 27019, тип = REPLICA_SET_SECONDARY, roundTripTime = 1,8 мс, состояние = СОЕДИНЕНО}];Вложенное исключение - com.mongodb.MongoTimeoutException: истекло время ожидания после 30000 мс в ожидании сервера, который соответствует WritableServerSelector.Клиентское представление состояния кластера: {тип = REPLICA_SET, серверы = [{адрес = 10.9.9.71: 27018, тип = НЕИЗВЕСТНО, состояние = СОЕДИНЕНИЕ, исключение = {com.mongodb.MongoSocketOpenException: сокет открытия исключения}, вызванный {java.net.ConnectException: соединение отклонено (соединение отклонено)}}, {адрес = 10.9.9.71: 27017, тип = UNKNOWN, состояние = CONNECTING, исключение = {com.mongodb.MongoSocketOpenException: сокет открытия исключительной ситуации}, вызванный {java.net.ConnectException: Соединение отклонено (Соединение отклонено)}}, {address = 10.9.9.71: 27019, тип = REPLICA_SET_SECONDARY, roundTripTime = 1.8 мс, состояние = CONNECTED}] в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanmentFore.inject (AutowiredAnnotationBeanPostProcessor.java:588) в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:88) в org.springframework.beans.factory.annotation.Ocess6) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1264) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:553) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:483) в org.springframework.beans.factory.support.AbstractBeanFactorygetSingleton (DefaultSingletonBeanRegistry.java:230) при org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302) в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:202)в org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate (DependencyDescriptor.java:208) в org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java:1138) в org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1066) в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:585)

1 Ответ

0 голосов
/ 11 мая 2018

О, мальчик, наконец-то узнал, почему это не удалось.

В моем pojo сущности Монго есть аннотации для генерации индексов и т. Д. Поэтому во время загрузки Spring Spring эти сущности инициализировались и пытались записать в базу данных. И это провалилось при загрузке Spring ..

...