当前位置: 首页 > news >正文

使用 Spring Boot 和 dynamic-datasource 实现多数据源集成

参考地址:

基础必读(免费) · dynamic-datasource · 看云

背景


在现代的微服务架构中,多数据源的使用场景越来越普遍。例如,一个系统可能需要同时访问多个数据库,或者在不同环境下切换数据源。Spring Boot 提供了强大的支持来简化多数据源的配置和管理。本文将介绍如何使用 Spring Boot 和 dynamic-datasource 库来实现多数据源的集成。


1. 为什么需要多数据源


多数据源的使用场景包括但不限于以下几种:
读写分离:通过主从数据库实现读写分离,提高系统的性能和可用性。
分库分表:在处理海量数据时,将数据分散到多个数据库中,以提高查询效率。
多租户架构:为不同的租户提供独立的数据存储,同时在逻辑上隔离数据。
动态切换数据源:根据不同的业务逻辑动态切换数据源,例如在不同环境下切换到不同的数据库。

2. 引入依赖


首先,我们需要在 Spring Boot 项目中引入 dynamic-datasource 的依赖。dynamic-datasource 是一个流行的开源库,用于动态切换数据源。

        <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>4.3.1</version></dependency>

3. 配置多数据源

application.yml 文件中配置多个数据源。以下是一个示例配置,包含三个数据源:masterslave_1 和 slave_2

spring:application:name: spring-boot-dynamic-datasourcetask:scheduling:pool:# 系统定时任务线程池,同时可以有N个定时任务可以同时执行。size: 2jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8main:allow-bean-definition-overriding: truedatasource:dynamic:# 设置默认的数据源或者数据源组,默认值即为masterprimary: master# 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源strict: falsedatasource:master:url: jdbc:mysql://127.0.0.1:3306/xxxx2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&useOldAliasMetadataBehavior=true&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=trueusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverdruid:# 最大空闲连接数必须 ≥ minIdlemaxActive: 10# 最小空闲连接数(建议设为maxActive的1/6)minIdle: 2# 初始连接数建议与minIdle一致(原值3过低)initialSize: 2# 等待超时时间(合理)maxWait: 30000slave_1:url: jdbc:mysql://127.0.0.1:3306/xxxx2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&useOldAliasMetadataBehavior=true&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=trueusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverdruid:# 最大空闲连接数必须 ≥ minIdlemaxActive: 10# 最小空闲连接数(建议设为maxActive的1/6)minIdle: 2# 初始连接数建议与minIdle一致(原值3过低)initialSize: 2# 等待超时时间(合理)maxWait: 30000slave_2:url: jdbc:mysql://127.0.0.1:3306/xxxx3?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai&useOldAliasMetadataBehavior=true&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=trueusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverdruid:# 最大空闲连接数必须 ≥ minIdlemaxActive: 10# 最小空闲连接数(建议设为maxActive的1/6)minIdle: 2# 初始连接数建议与minIdle一致(原值3过低)initialSize: 2# 等待超时时间(合理)maxWait: 30000

    4. 使用 @DS 切换数据源。

    /*** @DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。** 注解	结果* 没有@DS	默认数据源* @DS("dsName") dsName可以为组名也可以为具体某个库的名称* @Service* @DS("slave")*/
    public class UserServiceImpl implements UserService {@Autowiredprivate JdbcTemplate jdbcTemplate;public List selectAll() {return  jdbcTemplate.queryForList("select * from user");}@Override@DS("slave_1")public List selectByCondition() {return  jdbcTemplate.queryForList("select * from user where age >10");}
    }

    上面的不重要,直接从Gitee仓库拉下来具体项目.

    https://gitee.com/hanyunchuan/spring-boot-dynamic-datasource

    https://gitee.com/hanyunchuan/spring-boot-dynamic-datasource.git

    相关文章:

  1. Python小工具开发实战:从零构建自动化文件管理器的心得与体悟
  2. Python-PLAXIS自动化建模技术与典型岩土工程
  3. 应用探析|千眼狼高速摄像机、sCMOS相机、DIC测量、PIV测量在光学领域的应用
  4. 基于C#+SQLServer2016实现(控制台)小型机票订票系统
  5. 【Bluedroid】蓝牙启动之 GAP_Init 流程源码解析
  6. Spring AOP与代理模式
  7. 《单调队列》题集
  8. HTTP全攻略:从入门到精通
  9. 经济系统的「资源死锁」与「架构重构」:从通缩陷阱到可持续模型设计
  10. 线性三角波连续调频毫米波雷达目标识别
  11. 开源组件hive页面安全问题
  12. 【面板数据】中国与世界各国新能源汽车进出口数据-分类别与不分类别(2017-2024年)
  13. 【AI图像生成网站Golang】部署图像生成服务(阿里云ACK+GPU实例)
  14. python打卡day53
  15. ​​信息系统项目管理师-信息系统工程 知识点总结与例题分析​​
  16. MultiTalk 是一种音频驱动的多人对话视频生成模型
  17. 设计模式(二)
  18. 上传IPA到App Store的步骤
  19. Java线程异常处理与多线程编程实践
  20. 当Python遇上多线程:ThreadPoolExecutor的实用指南
  21. 做建筑钢材的b2b网站有哪些/小游戏推广接单平台
  22. 做网站计划/福州短视频seo获客
  23. 长春建站网站模板/数字化营销怎么做
  24. wordpress+游戏网站/怎么样建网站
  25. 深圳做生鲜食材的网站叫什么/自己有网站怎么推广
  26. layui做的网站/自己的网站怎么在百度上面推广