一、Flyway 简介
为什么要使用flyway?
在多人开发的项目中,我们经常会遇到下面的问题,有了flyway,这些问题都能得到很好的解决。
自己写的SQL忘了在所有环境执行。别人写的SQL我们不能确定是否都在所有环境执行过了。有人修改了已经执行过的SQL,期望再次执行。需要新增环境做数据迁移。每次发版需要手动控制先发DB版本,再发布应用版本... ...
Flyway是一款流行的开源数据库迁移工具,主要用于对结构化数据库进行版本控制和升级管理。以下是Flyway的主要功能简介:
1. 数据库迁移:
○ Flyway通过SQL脚本或Java代码(Java-based migrations)来执行数据库的版本升级、回滚和修复操作。
○ 它按照特定的命名约定组织迁移脚本,并确保这些脚本在目标数据库中按顺序执行。
2. 版本控制:
○ Flyway维护一个名为flyway_schema_history(默认名称,可自定义)的元数据表,用于记录已经应用到数据库的所有迁移历史。
○ 每个迁移脚本都有一个唯一的版本号(如V1__init.sql,V2__add_table.sql等),Flyway会根据版本号自动排序并执行迁移。
3. 自动化部署:
○ 与构建工具(Maven, Gradle等)集成,可以轻松地将数据库迁移集成到CI/CD流程中,确保每次部署时数据库结构与应用程序保持同步。
4. 兼容多种数据库:
○ Flyway支持广泛的数据库类型,包括但不限于MySQL、PostgreSQL、Oracle、SQL Server、DB2、SQLite、MariaDB等。
5. 命令行工具与编程API:
○ 提供命令行界面(CLI)以独立于应用运行迁移任务。
○ 同时也提供Java API,使得开发者能够在Java应用内部直接调用Flyway的功能。
6. 迁移策略:
○ 支持多个迁移模式,例如:清理(clean)、初始化(baseline)、迁移(migrate)、验证(validate)以及修复(repair)。
○ 清理(clean)操作会删除所有对象并重置到初始状态;初始化(baseline)为现有数据库设置起始基准点;迁移(migrate)负责执行未完成的迁移脚本;验证(validate)检查当前数据库是否匹配预期迁移状态。
7. 团队协作:
○ Flyway允许开发团队成员以一致且可控的方式对数据库结构进行更改,避免合并冲突和生产环境中的部署问题。
总之,Flyway通过实现数据库变更的标准化管理和自动化处理,大大简化了软件开发生命周期中数据库版本管理的复杂性,增强了数据库更新过程的可靠性和一致性。
二、Flyway 快速入门
1. 引入依赖和 Flyway maven 插件
<!--db--&g