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
- Migrate(迁移)> Migrates the schema to the latest version. Flyway will create the schema history table automatically if it doesn’t exist.
执行该命令,会运行最新版本的脚本文件,如果flyway_schema_history
记录表不存在,则会先创建它
- Clean> Drops all objects (tables, views, procedures, triggers, …) in the configured schemas.
清理数据库,会将所有对象(表,视图,过程,触发器,…)清除。生产环境请禁用
- Info
显示flyway_schema_history
的记录信息 - Validate
- Undo
- Baseline
- Repair