首页 文章

从Spring启动应用程序连接MongoDB副本只读辅助

提问于
浏览
0

我们得到了一个带有三个节点的mongodb副本集(Say A,B,C)当A和B关闭时,mongo使节点C成为只读(这很棒!)

我们的要求是,当只读取节点是可用的(无主要)时,应用程序仍应继续以只读模式工作 .

如果我使用java MongoClient库与mongo客户端连接操作 ?readPreference=secondaryPreferred ,客户端程序能够连接到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 = secondaryPreferred

任何帮助将受到高度赞赏 .

调用init方法失败;嵌套异常是org.springframework.dao.DataAccessResourceFailureException:在等待与WritableServerSelector匹配的服务器的30000毫秒后超时 . 集群状态的客户端视图是{type = REPLICA_SET,servers = [{address = 10.9.9.71:27018,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java . net.ConnectException:连接被拒绝(Connection refused)}},{address = 10.9.9.71:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java.net引起.ConnectException:连接被拒绝(Connection refused)}},{address = 10.9.9.71:27019,type = REPLICA_SET_SECONDARY,roundTripTime = 1.8 ms,state = CONNECTED}];嵌套异常是com.mongodb.MongoTimeoutException:在等待与WritableServerSelector匹配的服务器时30000 ms后超时 . 集群状态的客户端视图是{type = REPLICA_SET,servers = [{address = 10.9.9.71:27018,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java . net.ConnectException:连接被拒绝(Connection refused)}},{address = 10.9.9.71:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java.net引起.ConnectException:连接被拒绝(连接被拒绝)}},{地址= 10.9.9.71:27019,类型= REPLICA_SET_SECONDARY,roundTripTime = 1.8 ms,状态=连接}},位于org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement . 注入(autowiredAnnotationBeanPostProcessor.java:588)org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:36 6)在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.DefaultSingletonBeanRegistry的org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306) . getSingleton(DefaultSingletonBeanRegistry.java:230)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)在org.springframework.beans.f上的org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)中的actory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement . 注(AutowiredAnnotationBeanPostProcessor.java:585)

1 回答

  • 3

    哦,男孩,终于明白为什么失败了 .

    在我的mongo实体pojo中,有注释生成索引等所以在Spring引导带中,这些实体被初始化并试图写入数据库 . 那是Spring引导失败的原因..

相关问题