跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

SpringBoot 集成多 MongoDB 实例的配置实践

SpringBoot 默认仅支持单 MongoDB 连接,通过自定义配置类可轻松实现多数据源切换。展示了如何排除自动配置,分别定义两个 MongoProperties、MongoDbFactory 及 MongoTemplate Bean,并配合 @Primary 注解指定默认库。配置文件采用 application.yml 区分命名空间,确保业务代码能灵活调用不同数据库实例。

佛系玩家发布于 2020/1/21更新于 2026/6/1726 浏览
SpringBoot 集成多 MongoDB 实例的配置实践

SpringBoot 集成多 MongoDB 实例的配置实践

在实际开发中,我们常遇到需要同时连接多个 MongoDB 集群的场景。Spring Boot 默认只支持单数据源配置,通过自定义 Bean 和排除自动配置,我们可以灵活地管理多个数据库实例。

1. 引入依赖

首先确保项目中引入了 Spring Data MongoDB 的 Starter 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2. 应用配置

在 application.yml 中定义两个独立的 MongoDB 连接信息,通过不同的前缀区分命名空间:

spring:
  application:
    name: double-mongo
  profiles:
    active: dev
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  server:
    port: 8008
sys:
  mongodb:
    one:
      uri: mongodb://user01:[email protected]:10135,192.168.1.3:10135/mongo01
    two:
      uri: mongodb://user02:[email protected]:10135,192.168.1.3:10135/mongo02

3. 配置类编写

主数据源配置

我们需要创建一个配置类来定义第一个(主)MongoDB 实例。这里的关键是设置 @Primary 注解,确保在没有指定名称时默认使用这个模板。

public class OneMongoConfig {
    private MongoClient mongo;

    @Primary
    @Bean("mongoTemplate")
    public MongoTemplate oneMongoTemplate(@Autowired @Qualifier("oneMongoDbFactory") MongoDbFactory mongoDbFactory, MongoConverter converter) {
        return new MongoTemplate(mongoDbFactory, converter);
    }

    @Primary
    @Bean
    public MongoDbFactory oneMongoDbFactory(@Autowired @Qualifier("oneMongoProperties") MongoProperties properties, Environment environment, ObjectProvider<MongoClientOptions> options) {
        MongoClientOptions _options = options.getIfAvailable();
        MongoClientFactory mongoClientFactory = new MongoClientFactory(properties, environment);
        this.mongo = mongoClientFactory.createMongoClient(_options);
        return new SimpleMongoDbFactory(this.mongo, properties.getMongoClientDatabase());
    }

    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "sys.mongodb.one")
    public MongoProperties oneMongoProperties() {
        return new MongoProperties();
    }
}

从数据源配置

第二个实例的配置逻辑类似,只是去掉了 @Primary 注解,并使用了不同的 Bean 名称以便业务代码按需调用。

public class TwoMongoConfig {
    private MongoClient mongo;

    @Bean
    public MongoTemplate twoMongoTemplate(@Autowired @Qualifier("twoMongoDbFactory") MongoDbFactory mongoDbFactory, MongoConverter converter) {
        return new MongoTemplate(mongoDbFactory, converter);
    }

    @Bean
    public MongoDbFactory twoMongoDbFactory(@Autowired @Qualifier("twoMongoProperties") MongoProperties properties, Environment environment, ObjectProvider<MongoClientOptions> options) {
        MongoClientOptions _options = options.getIfAvailable();
        MongoClientFactory mongoClientFactory = new MongoClientFactory(properties, environment);
        this.mongo = mongoClientFactory.createMongoClient(_options);
        return new SimpleMongoDbFactory(this.mongo, properties.getMongoClientDatabase());
    }

    @PreDestroy
    public void close() {
        if (this.mongo != null) {
            this.mongo.close();
        }
    }

    @Bean
    @ConfigurationProperties(prefix = "sys.mongodb.two")
    public MongoProperties twoMongoProperties() {
        return new MongoProperties();
    }
}

整合与启动类

最后,将上述配置导入到总配置类中,并在启动类里排除默认的 MongoDB 自动配置,防止冲突。

@Configuration
@Import({OneMongoConfig.class, TwoMongoConfig.class})
public class MongoConfig {
}
@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

这样配置后,你可以通过注入 mongoTemplate 获取主库,或通过 twoMongoTemplate 获取从库,实现多数据源的灵活切换。

目录

  1. SpringBoot 集成多 MongoDB 实例的配置实践
  2. 1. 引入依赖
  3. 2. 应用配置
  4. 3. 配置类编写
  5. 主数据源配置
  6. 从数据源配置
  7. 整合与启动类
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Go Web 开发核心基础:HTTP 协议与实战指南
  • 下载工具汇总:WebDAV、Pandownload、Gopeed、MediaGo、IMFile Desktop
  • Rust 与 WebAssembly 实战:在浏览器与 Node.js 中运行高性能代码
  • 国产 AI 智能体工具盘点:Claw 系列收录与官网指引
  • Rust 与 WebAssembly 深度实战:在浏览器与 Node.js 中运行高性能代码
  • LLaMA-Factory 微调 GPT-OSS-20B 模型实战(LoRA 版)
  • Rust 与 Redis 开发实战:构建高性能会话管理系统
  • Cordova 开发遇到 Internal navigation rejected 错误的排查与修复
  • C++ 二叉搜索树详解:增删查改与 Key/Value 场景实现
  • 基于 Rokid CXR-M SDK 构建 AI 远程协作助手实战
  • Rust 游戏引擎 Piston 初学者入门指南
  • C++ 核心基础:从程序结构到内存模型
  • 机器人通讯总线选型指南:CAN/FD、高速 485 与 EtherCAT 对比
  • 大模型 Agent 核心技术与面试要点解析
  • Pi0 机器人大模型昇腾 A2 算力测评
  • Rust 异步微服务架构最佳实践与反模式
  • Ubuntu 前端开发环境搭建与 Vue 实战
  • Rust 异步微服务架构最佳实践与反模式
  • 大模型算法岗位面试攻略:核心常见问题详解
  • OpenClaw 插件升级:支持一键配置 QQ 与飞书机器人接入

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online