在之前的公司用过flyway,但是只知道flyway clean migrate命令,但是没有真正的自己搭建过。今天搭建了一下,真心觉得flyway真的是简单美好*_*
官网:https://flywaydb.org/
特点如下:
(1)操作简单,只要配置好数据库链接、用户名、密码,即可执行数据库脚本。
(2)数据库脚本sql文件命名方式简单唯一:V版本号__描述.sql,其中,版本号的标志为前面一个大写的V,版本号后面接两个下划线。“描述”中可以用多个单个下划线表示,必须以sql结尾。比如:
? ? ? ? ?V1.2.20200918140000__init_t_user_by_zxy.sql(这个命名规范只有这一种,所以大家不要像我一样不撞南墙不回头,花了半天时间发现只有这种格式能用)
(3)Flyway版本管理是依赖于它在数据库执行的schema的,用于记录已执行的版本和执行的状态,默认表为flyway_schema_history。比如,已经在数据库执行过V1.1__description.sql这个脚本,且成功,那么下次执行的时候略过这个sql脚本,依次执行比当前版本高的其他版本sql,如:V1.2__description.sql。
flyway_schema_history的结构如图:
(4)执行过程中发生错误,会终止当前程序,flyway_schema_history的历史版本也会只更新到发生错误的sql文件的版本,后面的版本不会被执行。
(5)可以实现多人共同对数据库进行版本管理
实现原理: https://flywaydb.org/getstarted/how,有两三年码龄的人,谷歌翻译成中文应该都能看懂,这里就不说了。
Flyway命令:
(1)Migrate: 将Schema Migrate到最新版本
(2)Clean:清空数据库里面的数据以及数据表,慎用
(3)Info命令:打印所有migration的详细信息和状态信息
(4)Validata命令:检查已经运行的migration是否已变更。
(5)Baseline:如果当前数据库中不存在flyway_schema_history,则会创建flyway_schema_history表来记录版本
(6)Repair:删除flyway_schema_history失败的执行记录
============================实践是检验真理的唯一标准===========================
我研究了两种flyway执行sql脚本的方式,
第一种是直接下载flyway的jar包,上传对应的sql,控制台执行flyway migrate命令执行数据库脚本;
第二种是将flyway配置在maven中;
先介绍第一种:jar包实现数据库版本管理
首先,下载flyway的压缩包,结构如图
(1)将sql的脚本放在sql文件夹里面,文件命名按照V版本号__描述.sql的方式命名;版本号不能相同,否则报错
(2)在conf文件夹里面配置用户名密码以及链接、驱动等:
(3)这个配置完成之后,配置环境变量,将flyway的路径“C:\work\app\flyway-5.0.7”配置到path里面。Win+R打开控制台,输入 flyway migrate,执行sql文件里面的文件。完成数据库脚本执行。
第二种:maven配置flyway相关
- 引入maven依赖和插件
org.flywaydb flyway-core 5.0.7
==========================================
org.flywaydb flyway-maven-plugin root root com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC false true 1_202010101448
- 在main/resources下建立文件夹,/db/migration,并将对应的sql放入当前文件夹内,sql文件命名要符合flyway命名规则
? ? ? 2.在控制台执行脚本:mvn flyway:migrate:
实践完毕?