Flyway介绍

Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。

在项目开发过程中,难免因为需求变化、设计缺陷等原因,导致在开发过程中需要修改数据库表,因此数据表也会在迭代周期不断迭代。这迭代过程中,常常需要手动在测试、生产等环境进行SQL脚本的升级,容易出错并且耗费精力。而在应用程序中使用Flyway,能快速有效地、自动地迭代数据库表结构,并保证部署到测试环境或生产环境时,数据表都是保持一致的。

Flyway的工作机制

核心原理就是flyway维护一张数据库表,用于记录数据库的SQL脚本执行。

1、项目启动,应用程序完成数据库连接池的建立后,Flyway自动运行。

2、初次使用时,Flyway会创建一个flyway_schema_history表,用于记录sql执行记录。

3、Flyway会扫描项目指定路径下(默认是classpath:db/migration)的所有sql脚本,与flyway_schema_history表脚本记录进行比对。如果数据库记录执行过的脚本记录,与项目中的sql脚本不一致,Flyway会报错并停止项目执行。

4、如果校验通过,则根据表中的sql记录最大版本号,忽略所有版本号不大于该版本的脚本。再按照版本号从小到大,逐个执行其余脚本。

Flyway基础使用

flyway提供了命令行程序、maven插件、gradle插件、JavaAPI等使用方式。这里仅介绍基于Maven插件的方式

flyway基于七个基础命令:Migrate、Clean、Info、Validate、Undo (只在企业版提供)、Baseline、Repair

  1. Migrate(迁移)> Migrates the schema to the latest version. Flyway will create the schema history table automatically if it doesn’t exist.


执行该命令,会运行最新版本的脚本文件,如果flyway_schema_history记录表不存在,则会先创建它

  1. Clean> Drops all objects (tables, views, procedures, triggers, …) in the configured schemas.


清理数据库,会将所有对象(表,视图,过程,触发器,…)清除。生产环境请禁用

  1. Info
    显示flyway_schema_history的记录信息
  2. Validate
  3. Undo
  4. Baseline
  5. Repair