You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:47:03