如何在 Spring Boot 中设置副本集?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中设置副本集?【英文标题】:How to set replica set in spring boot? 【发布时间】:2017-01-23 08:20:40 【问题描述】:我有一个 spring boot 服务器,我想将它连接到我的 mongoDB 副本集。 (3台服务器)
1.在我配置的application.properties中:
spring.data.mongodb.uri=mongodb://user:password@172.1.1.55:27017/admin
但是如果我尝试写入不是主要的服务器,我会得到错误。那么如何配置我的 Spring Boot 应用程序始终知道谁是主要应用程序并写入主要应用程序?
我知道有一个选项可以写:
spring.data.mongodb.uri=mongodb://user:password@172.1.1.55:27017,172.1.1.2:27017,172.1.1.3:27017/admin
但它给我抛出了一个异常:
2016-09-11 14:14:54.811 INFO 3128 --- [-31-61-35:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server ip-172-1-1-2:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.2.2.jar:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114) ~[mongodb-driver-core-3.2.2.jar:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128) ~[mongodb-driver-core-3.2.2.jar:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) ~[na:1.8.0_101]
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_101]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_101]
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_101]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_101]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_101]
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50) ~[mongodb-driver-core-3.2.2.jar:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.2.2.jar:na]
... 3 common frames omitted
-
我总是连接到管理数据库。但我需要访问另一个数据库,因为我的集合在那里。如何配置用户将连接到所有数据库?
因为该用户将使用不同的数据库和不同的集合?
非常感谢
【问题讨论】:
您对第一个问题有任何解决方案吗?我也遇到同样的错误 【参考方案1】:在另一个答案 (How to configure spring-data-mongodb to use a replica set via properties) 中,其中一个答案(来自@nwolfe)说:
...发现代码忽略了uri值,如果有的话 为
spring.data.mongodb.host
配置的值,spring.data.mongodb.port
、spring.data.mongodb.username
或spring.data.mongodb.password
。如果我把所有这些信息都放在 uri (并从 属性文件),连接代码工作。
以下是定义 URI 的方法,来自 spring documentation:
您可以设置 spring.data.mongodb.uri 属性来更改 URL 和 配置副本集等附加设置:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test
【讨论】:
以上是关于如何在 Spring Boot 中设置副本集?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中设置 enableLoggingRequestDetails='true'
如何在 Spring Boot 中设置 UTF-8 字符编码?