003-多数据源

文章介绍了若依框架如何利用Spring的AbstractRoutingDataSource实现多数据源动态切换。通过DataSourceType枚举和DynamicDataSourceContextHolder的ThreadLocal存储数据源标识,结合Druid配置和切面编程实现数据源的选择。多数据源主要用于业务分库和读写分离场景,可避免复杂的手动路由逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 若依多数据源分析

1.1 介绍

若依使用Spring提供的AbstractRoutingDataSource实现每次请求,动态获取指定的数据源

使用DataSourceType枚举定义多个数据源标识

使用DynamicDataSourceContextHolder中的ThreadLocal变量存储当前线程的使用数据源标识

使用DruidConfig配置多数据源的Bean注入和AbstractRoutingDataSourceBean的注入。在其中,使用DruidProperties获取多数据源的通用配置

使用DataSource注解+切面DataSourceAspect实现根据service方法上的注解,实现放入数据源标记。在执行方法的时候,经由AbstractRoutingDataSource根据当前线程的标记,来动态使用某个数据源

1.2 多数据源接口流程图

在这里插入图片描述

1.3 自定义实现步骤

  1. 配置yml配置文件,配置多数据源。
  2. 定义配置类,使用@ConfigurationProperties或者是@Value注入配置属性
  3. 定义一个多数据源管理类,加载多个数据源,放入一个Map中,key为数据源标识,可以使用枚举定义,value为Datasource对象
  4. 定义一个DynamicDataSourceContextHolder,定义ThreadLocal对象放入当前线程使用的数据源标识
  5. 定义AbstractRoutingDataSource实现类,设置所有的数据源和默认的数据源。重写determineCurrentLookupKey方法,返回DynamicDataSourceContextHolder中ThreadLocal的数据源标识
  6. 定义DataSource注解,可以标识类或者方法,作用于Service。可以指定当前方法使用哪个数据源
  7. 定义切面DataSourceAspect,根据DataSource注解中的标识,放入DynamicDataSourceContextHolder中共的ThreadLocal对象中

这样就可以实现加入注解后,可以根据动态根据注解切换数据源

1.4 用途

这种方式一般使用在业务分库的情况下。如果主从,需要加很多额外的代码保证功能。

读写分离建议使用Mybatis的Sql拦截,分析是否SELECT语句,来分配主库和从库。

或者直接使用现成的工具或者中间件搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值