# multi-datasource-demo **Repository Path**: lau5757521/multi-datasource-demo ## Basic Information - **Project Name**: multi-datasource-demo - **Description**: Spring Boot 多数据源演示项目 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-27 - **Last Updated**: 2025-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📋 Spring Boot 多数据源演示项目 ## 🚀 项目概述 这是一个基于 **Spring Boot 2.7.18** 和 **MyBatis-Plus 3.5.3.1** 构建的多数据源演示应用,专门用于展示如何在实际项目中实现和管理多个数据源的动态切换与操作。 ## 🎯 项目核心特性 ### 🔄 动态多数据源架构 - **主数据源(master)**:`primary_db` - 处理核心业务数据(如用户管理) - **从数据源(slave)**:`secondary_db` - 处理辅助业务数据(如产品管理) - **智能路由**:通过 `@DS` 注解实现方法级别的数据源精确切换 - **连接池管理**:集成 Druid 连接池,提供高性能数据库连接管理 ### 🛠️ 技术栈组合 - **框架**: Spring Boot 2.7.18 + Spring Web - **ORM**: MyBatis-Plus 3.5.3.1(提供强大的CRUD能力) - **多数据源**: dynamic-datasource-spring-boot-starter 3.6.1 - **数据库**: MySQL 8.0.33 - **连接池**: Druid 1.2.16 - **开发工具**: Lombok, Spring Boot Configuration Processor - **测试框架**: Spring Boot Test + JUnit 5 ### 🔧 架构优势 1. **零配置切换**:无需手动管理数据源连接,框架自动处理 2. **事务隔离**:每个数据源独立的事务管理,确保数据一致性 3. **高度可扩展**:支持任意数量数据源的扩展 4. **性能监控**:Druid 提供详细的连接池监控和SQL性能分析 ## 📦 项目结构 ``` ├── src/main/java/com/example/ │ ├── controller/ # RESTful API控制层 │ │ └── UserController.java # 用户控制器 │ ├── service/ # 业务逻辑层(含多数据源切换逻辑) │ │ ├── impl/ │ │ │ └── UserServiceImpl.java │ │ └── UserService.java │ ├── mapper/ # 数据访问层(MyBatis-Plus映射器) │ │ └── UserMapper.java │ ├── entity/ # 数据实体层 │ │ └── User.java │ └── MultiDatasourceDemoApplication.java # 启动类 ├── src/main/resources/ │ └── application.yml # 动态数据源配置文件 ├── src/test/java/ │ └── MultiDatasourceDemoApplicationTests.java # 完整测试套件 ├── sql/ # 数据库脚本 │ ├── primary_db.sql # 主数据库脚本 │ └── secondary_db.sql # 从数据库脚本 └── pom.xml # Maven配置文件 ``` ## 🔍 功能验证体系 项目包含完整的测试套件,验证以下核心功能: - ✅ **主库完整CRUD**:用户数据的增删改查操作 - ✅ **从库完整CRUD**:产品数据的增删改查操作 - ✅ **数据源隔离**:确保不同数据源的数据独立性 - ✅ **事务管理**:多数据源环境下的事务正确性 - ✅ **性能测试**:连接池效率和SQL执行性能 ### 测试覆盖范围 ``` 📋 测试覆盖范围: ✅ Spring容器初始化 ✅ 主库增操作 (master数据源) ✅ 主库查操作 (master数据源) ✅ 主库改操作 (master数据源) ✅ 主库删操作 (master数据源) ✅ 从库增操作 (slave数据源) ✅ 从库查操作 (slave数据源) ✅ 从库改操作 (slave数据源) ✅ 从库删操作 (slave数据源) ``` ## 🚀 快速开始 ### 1. 环境要求 - **JDK**: 8+ - **Maven**: 3.6+ - **MySQL**: 8.0+ ### 2. 数据库准备 ```sql -- 创建主数据库 CREATE DATABASE primary_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建从数据库 CREATE DATABASE secondary_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 执行 sql/ 目录下的建表脚本 ``` ### 3. 配置调整 修改 `src/main/resources/application.yml` 中的数据库连接信息: ```yaml spring: datasource: dynamic: datasource: master: url: jdbc:mysql://localhost:3306/primary_db?... username: your_username password: your_password slave: url: jdbc:mysql://localhost:3306/secondary_db?... username: your_username password: your_password ``` ### 4. 启动应用 ```bash # 使用Maven启动 mvn spring-boot:run # 或者使用批处理脚本(Windows) start.bat ``` ### 5. 功能验证 ```bash # 运行完整测试套件 mvn test # 运行指定测试类 mvn test -Dtest=MultiDatasourceDemoApplicationTests ``` ## 🎨 应用场景 这个项目适用于以下业务场景: ### 📖 读写分离 - **主库(master)**:负责所有写操作(INSERT、UPDATE、DELETE) - **从库(slave)**:负责所有读操作(SELECT) - **自动路由**:通过业务逻辑自动选择合适的数据源 ### 🏢 业务分离 - **用户系统**:使用主数据源管理用户相关数据 - **产品系统**:使用从数据源管理产品相关数据 - **订单系统**:可扩展为第三个数据源 ### 🔄 数据迁移 - **新老系统并行**:新老数据库同时运行,平滑迁移 - **灰度发布**:部分功能切换到新数据源测试 ### 🏗️ 微服务演进 - **单体到微服务**:为微服务拆分做准备的过渡方案 - **服务解耦**:不同业务模块使用独立的数据存储 ## 🔧 核心技术实现 ### 数据源配置 ```java @DS("master") // 使用主数据源 public boolean saveTo(String dataSource, User user) { // 业务逻辑 } @DS("slave") // 使用从数据源 public List listFrom(String dataSource) { // 业务逻辑 } ``` ## 💡 学习价值 通过这个项目,您可以掌握: ### 🎓 技术技能 - Spring Boot 多数据源配置的最佳实践 - MyBatis-Plus 在多数据源环境下的使用技巧 - Druid 连接池的优化配置 - 动态数据源切换的实现原理 ### 🏗️ 架构设计 - 企业级应用的数据源架构设计 - 微服务数据存储的拆分策略 - 高可用数据库架构的实现思路 ### 🧪 测试驱动 - 多数据源环境的测试策略 - 数据源隔离的验证方法 - 自动化测试的最佳实践 ## 📊 性能特性 ### 连接池配置 - **初始连接数**: 5 - **最小空闲连接**: 5 - **最大活跃连接**: 20 - **连接超时时间**: 60秒 - **空闲连接检测**: 60秒间隔 ### 监控能力 - **连接池状态监控**:实时查看连接池使用情况 - **SQL性能分析**:慢SQL检测和性能统计 - **数据源健康检查**:自动检测数据源可用性 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request 来改进这个项目! ### 开发规范 1. 遵循阿里巴巴Java开发手册 2. 保持测试覆盖率在80%以上 3. 提交前运行完整测试套件 4. 添加适当的中文注释和文档 ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 --- **这个项目不仅是一个完整的多数据源解决方案演示,更是学习现代 Java 企业级开发的优秀参考案例。** 🚀