分库分表一直是潮流,我这边简单介绍一下我实现分库、主从分离的一些实践经验。

1、实现分库:

首先在配置文件中配置多个数据源

Spring+mybatis分库分表

其次自定义数据源定向类继承spring提供的AbstractRoutingDataSource,复写determineCurrentLookupKey方法,设置数据源:

Spring+mybatis分库分表

在定义数据源拦截器类,获取指向的数据源:

Spring+mybatis分库分表

接着我们再根据增删改查功能不同决定操作主表还是从表,这里我们需要借助spring aop实现。

首先在配置文件中加入如下配置:

Spring+mybatis分库分表

切面处理类如下:

Spring+mybatis分库分表

最后就是其中反复用到的DataSourceSwitch类了,如下:

Spring+mybatis分库分表

光这几个截图估计也理不通整个流程,下面我就简单梳理一遍整个流程:

1、一个请求进来会先经过DataSourceInterceptor获取用户tenantId,塞入DataSourceSwitch类中定义的ThreadLocal中

2、如果该请求要操作数据库的话,之前配置的切面此时起了作用,操作数据库之前,会依据其方法名判断选择主库还是从库,并调用DataSourceSwitch类中定义的setSlave或

setMaster赋值,具体实现参照DataSourceAdvice类

3、调用setSlave或setMaster时,再取出ThreadLocal中的tenantId拼接数据源名称,如DataSourceSwitch类中定义的方法所示

4、最后获取数据源时,根据DynamicRoutingDataSources复写的determineCurrentLookupKey获取已经拼接好的数据源名称

相关文章:

  • 2022-12-23
  • 2021-05-06
  • 2022-12-23
  • 2022-02-12
  • 2022-01-14
  • 2021-11-26
  • 2021-12-11
  • 2022-02-11
猜你喜欢
  • 2021-06-09
  • 2021-09-05
  • 2021-06-22
  • 2022-12-23
  • 2021-06-20
  • 2022-02-22
相关资源
相似解决方案