项目中须要根据不一样业务进行分库,首先是将业务不一样业务映射到不一样过的数据库( biz --> db,可能存在多对一状况),spring
查看springjdbc源码发现AbstractRoutingDataSource类做为一个数据源路由抽象类,能够担当这个事情,其设计思想也比较简单,sql
首先将多个数据源的映射关系本身维护完成后注入进来,而后本身定义一个路由规则,重点部分见代码:数据库
首先能够看到该类是一个抽象类,重点关注变量targetDataSource和resolvedDataSources.安全
其中targetDataSource用于将用户创建的映射关系注入进来,能够经过以下方法线程
resolvedDataSources用于真正存储依赖关系,targetDataSource仅仅是个中介,解析代码见下图设计
核心路由方法:3d
是否是很清楚,首先获取数据源映射key,而后经过key获取数据源blog
数据源映射获取方法为抽象方法,见下图:路由
实现时须要注意线程安全,最佳实现时经过ThreadLocal将在dbsql执行前将key设置进去,以便后来获取这个key,get
调用入口: