Java 如何通过属性配置spring data mongodb以使用副本集

Java 如何通过属性配置spring data mongodb以使用副本集,java,mongodb,spring-boot,spring-data-mongodb,Java,Mongodb,Spring Boot,Spring Data Mongodb,我目前正在编写一个应用程序,它应该使用MongoDB的副本集。它是基于Spring引导的应用程序,以下属性可以很好地连接到一台服务器: spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=demo 这对于我的本地开发环境来说是绝对好的。但稍后它应该针对MongoDB副本集运行,所以我必须提供至少2个、更好的3个副本集种子,但如何使用属性来实现这一点 我在这个

我目前正在编写一个应用程序,它应该使用MongoDB的副本集。它是基于Spring引导的应用程序,以下属性可以很好地连接到一台服务器:

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=demo
这对于我的本地开发环境来说是绝对好的。但稍后它应该针对MongoDB副本集运行,所以我必须提供至少2个、更好的3个副本集种子,但如何使用属性来实现这一点

我在这个页面上查看了一下:,但是上面提到的复制集没有显式属性。 提供逗号分隔的地址列表,如下所示:

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
mongodb://username:mypasswd@hostname1:27017,hostname2:27017,hostname3:27017/dbname
(我一个接一个地试了。)

这也不起作用(事实上,它产生了一个异常,允许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>

我知道上面的配置略有不同,但我当前尝试的是获取一个异常,它向我显示没有可访问的副本集节点


有什么想法和提示吗?

没有明确的支持,没有。但是您应该能够通过
uri
参数对其进行配置


实际上,我们最近进行了更新。

我遇到了类似的问题,我深入研究了
MongoProperties::createMongoClient()
代码,发现如果为
spring.data.mongodb.host
spring.data.mongodb.port
配置了任何值,那么该代码会忽略uri值,
spring.data.mongodb.username
spring.data.mongodb.password

如果我将所有这些信息都放在URI中(并从属性文件中删除所有其他
spring.data.mongodb.*
值),那么连接代码就起作用了

URI属性设置的结果如下所示:

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
mongodb://username:mypasswd@hostname1:27017,hostname2:27017,hostname3:27017/dbname

用于格式化URI值的文档为。

从此更改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:password@server1:port,server2:port/database
…对此:

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:password@server1:port,server2:port/database

谢谢你的回答,斯蒂芬。哪个版本的Spring Data Mongo支持这种配置属性?好的,我终于有时间检查了。它似乎起作用了。但是日志消息对集群不是很清楚(希望我能抽出时间调查并记录一个问题),无论如何,感谢您的快速帮助!谢谢你的评论,我完全忘了添加这个。事实上,如果设置了上述任何值,URI将被忽略。您能告诉我在此处添加身份验证数据库名称的位置吗?连接到副本集时,默认情况下将从主节点执行读取操作,除非明确指定从次节点读取权限?是否必须指定replset选项标志?。如果没有指定会发生什么?如果你使用的是mongo atlas,这篇文章会很有帮助-