一、flyway简介
1.Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步.
2.运行流程如下:
a、 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history
b、 紧接着Flyway将开始扫描文件系统或应用程序的类路径进行迁移。然后,Flyway的数据迁移将基于对用sql脚本的版本号进行排序,并按顺序应用:
可以看到执行数据库表后在checksum中储存一个数值,用于在之后运行过程中对比sql文件执行是否有变化。
c、flyway在执行脚本时,会在源数据表中检查checksum值,并确定上次运行到哪一个脚本文件,本次执行时从下一条脚本文件开始执行。所以编写脚本的时候不要去修改原有的脚本内容,并且新的脚本版本号要连续
d、官方文档地址:https://flywaydb.org/documentation/
二、flyway集成
1.由于当前项目中springboot版本为1.5.8,故以下内容根据springboot--1.5.8版本、flyway-core--5.0.3、flyway-maven-plugin--5.0.3做集成和使用介绍。
2.引入flyway相关maven依赖如下:
3.build中引入flyway相关插件(plugin)如下:
4.在yaml中增加flyway相关配置参数:
三、flyway的使用
1.将.sql脚本维护在db.migration下面
2.sql脚本命名格式
sql 规范 V+版本号(版本号的数字间以"."或"_"分隔开)+双下划线(用来分隔版本号和描述)+文件描述+后缀名,例如:V1.1__test.sql、V1.2__test2.sql。(版本号必须唯一不然的话执行时会有冲突)
ps:flyway会根据版本号的大小进行顺序、增量执行。
四、FAQ
1.出现以下日志,代表flyway_schema_history中存在数据库脚本1.2执行错误
解决方案:a): 将sql脚本修复正确并手动在数据库执行后,手动将flyway_schema_history中success值0修改为1(代表成功)。
b):在flyway_schema_history中将1.2版本这条记录删掉,重启项目。
2.出现以下日志,代表历史执行过的脚本被修改过
解决方案:a):将脚本还原,增量的去执行要修改的sql脚本
3.出现以下日志,代表sql执行错误检查sql执行