这两天学习了flyway-migrate,在领到这张卡之前,老师说应该尽量细化每张卡片,保证每天至少完成一张卡。因为我们这张卡已经没有再分的必要了,于是乎,完善了description就兴致勃勃地开始了。
这么看来大致上可分为三步:
1. 了解flyway基本概念;
2. 运行方式;
3. 写demo
1. 基本概念
flyway是什么
Flyway 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。
那么什么是数据迁移?什么情况下需要进行数据迁移呢?
-----数据库迁移在传统意义上包括两种情况:情况一是数据库迁移,由于项目需要,当前数据库需要从一种类型
迁移为另一种类型,例如从 MySQl 迁移到 Oracle,另一种情况则是很多时候数据需要迁移到一台新的服务器上,此时也会用到数据迁移。
但是,我们现在把每一次的数据库变化也算在其中,这也可以称为数据的一种迁移。
6大基本用法(基本命令)
Migrate, Clean, Info, Validate, Baseline and Repair.
我们这次的任务是学习Migrate,所以其他的没有深究
Migrate是什么
它是flyway工作流程的核心,Flyway在Migrate时会检查Metadata(元数据)表,如果不存在会创建Metadata表,Metadata表主要用于记录版本变更历史以及Checksum之类的。它扫描文件系统,判断当前migratiion的版本和数据库的版本是否一致,如果不一致,按顺序依次更新数据库至最新版本,否则,不做任何操作。
2. 运行方式
flyway的运行方式很多,这里只研究gradle方式,其他的还有:
command-line、API(java/android)、maven、SBT、ant
关于gradle参考以下链接:
https://spring.io/guides/gs/gradle/#initial
https://github.com/XLuoChen/gradle-hello-world
关于gradle运行方式的说明
在Gradle中引入Flyway插件,通常有两种方式:
- 采用buildscript依赖方式
- 采用DSL方式引用Plugins
Gradle中配置Flyway Properties有两种方式:
- 在build.gradle中配置Flyway Properties
- 在gradle.properties中配置Flyway Properties
3. demo
基本概念了解了就到重要的demo了,这一阶段可谓历尽千辛万苦,先上结果吧
地址:https://github.com/twa-rs-demos/flyway-migrate-demo
这一阶段一直卡壳,导致原定一天的任务历时两天才算完成
第一天时我们在网上找了很多资料,也找到了建立demo相关步骤,结果有的地方需要往build.gradle文件中添加配置,可是我们并不知道这个文件在哪里,耗了很多时间,最后不得不求助了总理,在总理的引导下,我们了解到这个build.gradle文件是gradle项目中的,因此要完成这个demo,首先需要知道如何创建gradle项目,并且flyway是一个相对较重量级的插件,可以先使用一个较轻量级的插件,一步步增加难度。
因此这一阶段的任务分解为了以下阶段:
1. 创建一个gradle项目,输出简单的hello world;
2. 在上一个项目的基础上引入一个轻量级的插件;
3. 引入flyway migrate,实现数据库的迁移;
有了明确的目标后,任务进行的较为顺利,第一个任务很快完成:
https://github.com/XLuoChen/gradle-hello-world/
第二个任务:
https://github.com/XLuoChen/gradle-hello-world/tree/plugin
第三个任务:
https://github.com/twa-rs-demos/flyway-migrate-demo
总结
这次学习耗时较久,以至于原定一天的任务远远超时,我总结了以下原因:
- 分解任务能力欠缺,思路不够清晰;
- 聚焦能力较差,容易陷入误区;
- 搜索资料的方法可能有一定偏差;
- 遇事缺乏耐心
通过这次学习,我发现了自己学习上的许多不久之处,在以后的学习中要努力克服这些问题
参考资料:
https://flywaydb.org/documentation/gradle/
https://spring.io/guides/gs/gradle/#initial
http://blog.waterstrong.me/flyway-in-practice/
http://adabeauty.github.io/2015/05/20/flyway/%E6%95%B0%E6%8D%AE%E5%BA%93/
https://github.com/stevenalexander/flyway-gradle