一、前言
前面的章节已经实现了mysql、MongoDB、redis和Activiti的多租户切实现方案,本章将继续学习Flyway数据库版本管理工具的多数据源实现方案。Flyway是独立于数据库的应用管理并跟踪数据库变更的数据库版本管理工具.使用Flyway可以像Git管理代码那样管理sql脚本,可以实现不同环境的sql脚本自动更新,开发人员像提交代码一样提交sql更新脚本,程序发布时自动更新数据库脚本,省去了运维人员收集和部署脚本的烦恼,开发环境验证的脚本,部署在测试环境可以自动升级。而且更新过程可追溯,目前Flyway支持很多数据库,常见的MySQL、MariaDB、Oracle都支持。
如果只是对一个数据库进行脚本升级,这个使用Flyway很简单,但是如果要对多租户的多个数据库进行升级,就需要借助Springboot的AbstractRoutingDataSource,在程序启动的时候连接不同租户的数据库进行数据库脚本的升级。
二、实现方案
实现方案很简单,我们只需要在Flyway配置的时候使用我们自定义的数据源即可。
1、首先由于我们已经有了MySQL的多数据源支持,Flyway可以复用该数据源
2、由于Flyway在初始化的时候需要传入一个数据源,我们可以把MySQL的数据源传进去。
3、 最后遍历所有的数据源,执行Flyway的migrate操作就完成了数据库脚本的升级功能。
三、准备
为了演示简单,我们需要准备一些数据库升级的sql脚本,首先是每个租户都需要升级的脚本文件,然后是租户tenant_one和tenant_two各自特有的升级脚本文件。
每个租户都要执行的脚本文件V1.1