一、 为什么使用Flyway
Flyway是一款开源的数据库版本管理工具,可以和SpringBoot/Cloud框架+Mysql/Oracle类的项目结合使用。对于数据库端使用Oracle系统中复杂数据库对象时,更加能提高数据库端代码或脚本版本管理的工作效率。
二、Flyway的工作机理说明
开始先介绍一下Flyway 的工作机理。
数据库端代码,通常指的SQL脚本,在数据库上进行部署时,无法像java代码一样直接替换,而只能按增量叠加的方式进行部署。这样在SVN上进行版本管理,从SVN上拉取的版本源代码无法在各个环境中直接执行。如何能做到在不同环境的数据库上增量部署解决呢?Flyway采用的方式是在每个环境中记录下当前数据库代码版本,然后对照当前版本比较后,执行后面增量版本的部分脚本。
实际上Flyway对每一个SQL脚本都必须进行版本编号,约定代码执行的先后顺序,然后用数据库表记录下每个SQL脚本执行的记录。这样当项目版本迁移到下一个版本时,则会在Flyway启动时增量执行剩下未被执行的数据库端的SQL脚本。
具体执行的步骤有下面几点:
1)当创建一个新项目时,Flyway会在数据库中新建一个Schma历史表,例如:schema_version,表名可以在Flyway项目的yml配置中进行定义;创建的这个表被用于跟踪数据库脚本执行记录;
Schema历史表结构如下:
各个字段如下:
version_rank 版本顺序
installed_rank 执行顺序
version 脚本的版本编号,从文件名中获取
description 脚本的描述,从文件名中获取
type 脚本类型(SQL、java)
script 脚本路径和名称
checksum 校验数
installed_by 脚本执行数据库用户
installed_on脚本执行时间
execution_time 执行耗时(毫秒ms)
Success字段表示了脚本是否执行成功(1:成功 0:失败),执行失败Flyway将自动停止卡在执行失败的脚本位置
2)当Flyway下次再启动时,Flyway会去扫描这个Schma历史表;
3)接着Flyway会扫描应用下面的文件系统或类路径,找到用于数据库执行的SQL脚本清单;
4