003-多数据源
若依使用Spring提供的实现每次请求,动态获取指定的数据源使用枚举定义多个数据源标识使用中的ThreadLocal变量存储当前线程的使用数据源标识使用配置多数据源的Bean注入和Bean的注入。在其中,使用获取多数据源的通用配置使用DataSource注解+切面实现根据service方法上的注解,实现放入数据源标记。在执行方法的时候,经由根据当前线程的标记,来动态使用某个数据源配置yml配置文件
·
1. 若依多数据源分析
1.1 介绍
若依使用Spring提供的AbstractRoutingDataSource
实现每次请求,动态获取指定的数据源
使用DataSourceType
枚举定义多个数据源标识
使用DynamicDataSourceContextHolder
中的ThreadLocal变量存储当前线程的使用数据源标识
使用DruidConfig
配置多数据源的Bean注入和AbstractRoutingDataSource
Bean的注入。在其中,使用DruidProperties
获取多数据源的通用配置
使用DataSource
注解+切面DataSourceAspect
实现根据service方法上的注解,实现放入数据源标记。在执行方法的时候,经由AbstractRoutingDataSource
根据当前线程的标记,来动态使用某个数据源
1.2 多数据源接口流程图
1.3 自定义实现步骤
- 配置yml配置文件,配置多数据源。
- 定义配置类,使用
@ConfigurationProperties
或者是@Value
注入配置属性 - 定义一个多数据源管理类,加载多个数据源,放入一个Map中,key为数据源标识,可以使用枚举定义,value为Datasource对象
- 定义一个
DynamicDataSourceContextHolder
,定义ThreadLocal对象放入当前线程使用的数据源标识 - 定义
AbstractRoutingDataSource
实现类,设置所有的数据源和默认的数据源。重写determineCurrentLookupKey方法,返回DynamicDataSourceContextHolder中ThreadLocal的数据源标识 - 定义
DataSource
注解,可以标识类或者方法,作用于Service。可以指定当前方法使用哪个数据源 - 定义切面
DataSourceAspect
,根据DataSource
注解中的标识,放入DynamicDataSourceContextHolder中共的ThreadLocal对象中
这样就可以实现加入注解后,可以根据动态根据注解切换数据源
1.4 用途
这种方式一般使用在业务分库的情况下。如果主从,需要加很多额外的代码保证功能。
读写分离建议使用Mybatis的Sql拦截,分析是否SELECT语句,来分配主库和从库。
或者直接使用现成的工具或者中间件搞定。
更多推荐
已为社区贡献3条内容
所有评论(0)