Flyway 是一款开源的数据库版本管理工具。 可以实现管理并跟踪数据库变更,支持数据库版本自动升级,而且不需要复杂的配置,能够帮助团队更加方便、合理的管理数据库变更。
研发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为了保证各环境都能正确的进行变更,我们可能需要维护一个数据库升级文档来保存这些记录,有需要升级的环境按文档进行升级。 这样手工维护有几个缺点:
为了解决这些问题,我们进行了一些调研,主要调研对象是 Liquibase 和 Flyway,我们希望通过数据库版本管理工具实现以下几个目标:
两者差异如下:
| Flyway | Liquibase | |
|---|---|---|
| 开发商 | Red Gate | Liquibase |
| 发布时间 | 2010年 | 2006年 |
| 版本 | 开源/商业 | 开源/商业 |
| 易用性 | 简单易用、学习成本低、功能相对较少 | 功能齐全、概念多,学习成本高 |
| 跨平台 | 手动实现 | 支持 |
| diff模式 | 商业版支持 | 支持 |
| 回滚 rollback | 商业版支持 | 支持 |
Flyway在第一次执行时,会创建一个默认名为 flyway_schema_history 的历史记录表,这张表会用来跟踪或记录数据库的状态,然后每次项目启动时都会自动扫描在 resources/db/migration 下的文件的版本号并且通过查询flyway_schema_history 来判断是否有新增文件,从而判断是否进行迁移。
默认的查找 migration 的路径为 classpath:db/migration ,对应 SQL 文件可放置在src/main/resources/db/migration 下,Java 类可放置在 src/main/java/db/migration 下。
目前支持mysql5.7的社区版为7.15.0,支持mysql8.0的版本是8.2.0,8.2.1移除了mysql支持:
<!-- 8.2.1版本开始,将各数据库版本支持拆分开来了 --><dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
<version>10.10.0</version>
</dependency>
<!-- 8.2.0版本及其老版本引入如下包 --><dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>8.2.0</version>
</dependency>