实践 springboot 多数据源

搭建环境

本次实验的环境搭建 需要3个mysql,来完成1主2从的主从复制

我花了3个小时尝试搭建mysql,最后发现主从复制失败,后来找到了下面这篇博客,用docker搭建,只用了10分钟就完成了

https://blog.csdn.net/sunlihuo/article/details/54018843


创建项目

我使用springboot来快速搭建环境

orm使用的是spring-jdbc

数据源的配置如下

实践 springboot 多数据源


主从切换

spring对主从切换提供了一个抽象类AbstractRoutingDataSource

所以我们创建一个动态数据源继承这个类

实践 springboot 多数据源


接下来是配置数据源,配置数据源有很多方法 ,比如网上的一种方式

实践 springboot 多数据源


不过此次,我用了另外一个方式配置(ImportBeanDefinitionRegistrar),实现这个类就可以动态的注册bean,其实和上面的是相同的,都是向ioc容器中配置datasource的bean,具体参见我的代码

实践 springboot 多数据源


然后,因为每次请求时单独的线程,而每次请求的数据源可能都不一样,所以我们要针对每个线程,让其持有需要的数据源,所以创建一个类,使用threadlocal让每个线程持有自己的数据源

实践 springboot 多数据源


然后为了方便配置数据源,我们写一个注解方便给每个方法配置专属的数据源,以及对应的aop配置

实践 springboot 多数据源


然后创建我们的测试方法

实践 springboot 多数据源


结果
实践 springboot 多数据源


期间很多借鉴了( http://412887952-qq-com.iteye.com/blog/2303075),并修改成符合自己的代码

最后放上我的代码 https://github.com/cdy1996/master-slave