Spring+mybatis分库分表

来源:互联网 发布:兔展软件下载 编辑:程序博客网 时间:2024/06/14 06:09

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

1、实现分库:

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


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


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


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

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


切面处理类如下:


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


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

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

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

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

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

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

原创粉丝点击