在之前的文章中我们了解了在Spring Boot如何整合单个数据源,并且我们也提到了数据源整合时候的原理。下面我们就依托于之前提到的原理来构建我们的多数据源应用。
之前文章结尾的时候我们提到了在整合Druid数据库连接池的时候,在MyBatis自动注入的注解上有如下一个配置。
@ConditionalOnSingleCandidate(DataSource.class)
而对于@ConditionalOnSingleCandidate注解,我们在讲条件注解的时候曾经提及到,它的意思就是在容器中只有一个DataSource实例的时候,这个自动配置类才会被加载生效。这就与我们上面提到的概念相互冲突了。为什么这么说呢?
因为根据这个注解的意思,容器中只能存在一个数据源,如果需要多个数据源那就不能使用MyBatis框架来进行整合了。那岂不是什么事情都干不了呢?根据字面的意思是可以这样理解的,但是实际上并不是这样。
多数据源的意思其实并不是在同一时刻有多个数据源同时被操作。在Spring框架中,提供了一个AbstractRoutingDataSource的类,根据字面意思,是用来进行数据源路由的,路由的意思就是相互之间可以切换。也就是说可以实现数据源之间的动态切换操作。所以被称为是动态数据源操作。所以这里MyBatis框架所支持其实是一个动态数据源的切换而不是想我们所理解的在同一时刻多个数据源共同操作的场景。
既然理解到这里了?那么我们就来研究一下在Spring Boot中如何去实现动态数据源。