Flyway
和Liquibase一样,Flyway也是一种开源的数据库迁移工具。Liquibase的文章在这里:https://www.jianshu.com/p/c7f32d8e4add
为什么需要数据库迁移工具?
让我们设想在做一个Shiny项目,交付物包括Shiny软件和Shiny数据库。我们的交付过程往往是这样的,也就是说我们需要保障Shiny在多个环境上的运行。
对于软件部分,我们已经有成熟的解决方案:Git/Svn等版本控制系统;GoCD/Jenkins/CircleCI等持续集成工具;蓝绿部署等成熟的自动化部署方案。但是对于数据库部分呢?很多项目仍然依赖于手动运行SQL脚本,甚至还在项目中处处可见用于补丁升级的SQL脚本。那么问题就来了:如何确认各个环境上的数据库状态?某个SQL脚本是否运行过了?数据库迁移工具就是帮助我们解决这个问题的。
Flyway是如何工作的?
那么Flyway是如何帮助我们解决上述问题的呢?
第一个最简单的场景:如何使用Flyway从无到有的创建数据库。
场景1-从无到有创建数据库Flyway用‘schema_version’数据表存放数据库schema的历史记录,跟踪数据库结构的变更;我们则需要在项目中定义Migration,通常用SQL或Java定义。如下图所示,Flyway在运行时会顺序执行上图中的Migration1和Migration 2来实现对数据库的更新;同时‘schema_version’表也会记录下这两次修改。
Flyway加载Migration的过程 Flyway schema history同步更新接下来就是第二个场景:基于已有数据库进行更新。Flyway仍然会遍历项目中定义的各个Migration,并参照schema history数据表,忽略版本号低于或等于当前版本的Migration,剩下的就是Pending Migration,然后按照版本号顺序执行Pending Migration,如下图所示:
‘Schema version’数据表同步记录更新。
因此,每当我们要对数据库的DDL或者DML进行演进,就只需要定义一个更高版本的Migration。
如何在Spring Boot项目中使用Flyway?
Step 1. 引入Flyway依赖
Step 2. 定义Migration
Spring Boot默认在classpath://db/migration目录下扫描Migration。