****
> 有需求就要想办法解决,最近参与的项目其涉及的三个数据表分别在三台不同的服务器上,这就有点突兀了,第一次遇到这种情况,可这难不倒笔者,资料一查,代码一打,回头看看源码,万事大吉
## 1. 预备知识
这里默认大家都会SSM框架了,使用时我们要往sqlSessionFactory里注入数据源。那么猜测:1、可以往sqlSessionFactory里注入多数据源来实现切换;2、将多个数据源封装成一个`总源`,再把这个`总源`注入到sqlSessionFactory里实现切换。答案是使用后者,即封装成`总源`的形式。Spring提供了动态切换数据源的功能,那么我们来看看其实现原理
## 2. 实现原理
笔者是根据源码讲解的,这些步骤讲完会贴出源码内容
### 一、
Spring提供了AbstractRoutingDataSource抽象类,其继承了AbstractDataSource。而AbstractDataSource又实现了DataSource。因此我们可以将AbstractRoutingDataSource的实现类注入到sqlSessionFactory中来实现切换数据源
### 二、
刚才我们将多个数据源封装成`总源`的想法在AbstractRoutingDataSource中有体现,其内部用一个Map集合封装多个数据源,即 `private Map