分库分表:
多个库多个表
多个库一个表
一个库多个表;
库:Order —>一个order表;
一个接口IRouting–定义行为
1.根据某种算法去计算出示那个库的行为
2.根据某种算法去计算出示具体库中的那个表的行为
3.表明的后缀为order-0001 计算表的生存后缀行为;
接口-ItulingRouting
抽象类:AbstractTulingRouting implements ITulingRouting,InittalizingBean{
具体实现类
接口类:
calDataSoureKey
getRoutingFileHashCode
calTableKey
getFormatTableSuffix
抽象类:getRoutingFileHashCode
getFormatTableSuffix
配置:
几个库,几个表,路由字段,表后缀风格,连接风格,默认规则;
DataSouteConfiguration
TulingMutiDataSource
路由类:AbstractRoutirgDataSource extends AbstractDataSource implement InitializingBear()
MutiDataSourceHolder;
保存数据源和表
final ThreadLocal dataSourceHolder = new ThreadLocal();
final ThreadLocal tableIndexHolder = new ThreadLocal();
setDataSourceKeyMapping(setMapping)–设置和保存数据源;
多数据源和映射关系配置
holder风格,
抽象类 afterPropertiesSet:工程在启动的时候,检查配置路由参数和 策略是否相匹配;
静态数据检查;
分库分表插件;
hasMap = 局部变量–为什么没有出现线程安全问题;
栈封闭
使用@ConditionOnProperty()注解 配置是否符合条件,根据配置文件的读取;
determineTargetDataSource(){
清除线程缓存:
MutiDataSourceHolder.clearDataSourceKey();
MutiDataSourceHolder.clearTableIndex();
insert into order${tableSuffix}(order_id,user_id,money) values(#{orderid},#{userid},#{money})