SpringBoot中获取MongoDB副本集连接节点主机名的方法
MongoDB副本集节点主机名获取实现(SpringBoot)
实现思路
在MongoDB中,db.hostInfo().system.hostname是通过执行数据库命令获取的,对应Spring Data MongoDB中可通过MongoTemplate或MongoDatabase对象执行该命令,实现逻辑与MySQL场景的JdbcTemplate调用类似。
步骤1:引入依赖
确保SpringBoot项目中已引入Spring Data MongoDB依赖:
Maven(pom.xml)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
Gradle(build.gradle)
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
步骤2:编写Service层代码
方式一:使用MongoTemplate(推荐,Spring封装方式)
package com.deploy.sometest.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Service; import org.bson.Document; @Service public class MongoHostNameService { @Autowired private MongoTemplate mongoTemplate; public String getCurrentNodeHostname() { // 执行hostInfo命令 Document hostInfo = mongoTemplate.executeCommand("{ hostInfo: 1 }"); // 从返回结果中提取主机名 Document systemInfo = hostInfo.get("system", Document.class); return systemInfo.getString("hostname"); } }
方式二:使用MongoDatabase(底层原生方式)
package com.deploy.sometest.service; import com.mongodb.client.MongoDatabase; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.bson.Document; @Service public class MongoHostNameService { @Autowired private MongoDatabase mongoDatabase; public String getCurrentNodeHostname() { Document hostInfo = mongoDatabase.runCommand(new Document("hostInfo", 1)); Document systemInfo = hostInfo.get("system", Document.class); return systemInfo.getString("hostname"); } }
步骤3:编写REST接口
创建Controller暴露接口供外部调用:
package com.deploy.sometest.controller; import com.deploy.sometest.service.MongoHostNameService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HostnameController { @Autowired private MongoHostNameService mongoHostNameService; @GetMapping("/mongo-hostname") public String getMongoHostname() { return mongoHostNameService.getCurrentNodeHostname(); } }
注意事项
- 需在SpringBoot配置文件中正确配置MongoDB副本集连接串,格式示例:
spring.data.mongodb.uri=mongodb://user:password@node1:27017,node2:27017,node3:27017/your_db?replicaSet=rs0 - 请求接口时,返回的是当前SpringBoot连接的副本集节点主机名,符合需求。
内容的提问来源于stack exchange,提问作者Justin Hoony
相关产品推荐
相关产品推荐

