java - 如何在spring boot中设置副本集?

标签 java mongodb spring-boot

我有一个 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. 我总是连接到管理数据库。但我需要访问另一个数据库,因为我的 Collection 在那里。我如何配置用户将连接到所有数据库? 因为这个用户将使用不同的数据库和不同的集合?

非常感谢

最佳答案

在另一个答案 (How to configure spring-data-mongodb to use a replica set via properties) 中,其中一个答案(来自@nwolfe)是这样说的:

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

以下是您可以从 spring documentation 定义 URI 的方法:

You can set spring.data.mongodb.uri property to change the URL and configure additional settings such as the replica set:

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test

关于java - 如何在spring boot中设置副本集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39508869/

相关文章:

java - 更改 Android 警报对话框中当前选定项目的颜色

java - selenium - 不可点击的链接

java - 使用 hibernate 条件从一个字段中获取两个不同的计数,以获得不同的日期

javascript - 使用node.js在javascript中访问mongodb文档

spring-boot - @ConfigurationProperties Spring Boot 配置注释处理器在类路径中找不到

java - 如何在 Groovy MarkupBuilder 中禁用 pretty-print ?

java - 从 Java/Groovy 批量加载 MongoDB 数据库进行测试

mongodb - 直接查询 MongoDB mapreduce 的结果与更新原始集合

spring-boot - 我可以使用 Karate 来测试微服务吗?

Java:基于对象值的同步