Flyway 一个方便集成的数据库版本管理工具

首先把官方的特性贴出来, 简明意概:

Flyway 的特性

* 自动升级(自动发现更新项):Flyway 会将任意版本的数据库升级到最新版本。Flyway 可以脱离JVM 环境通过命令行执行,可以通过Ant 脚本执行,通过Maven 脚本执行(这样就可以在集成环境自动执行),并且可以在应用中执行(比如在应用启动时执行)。

* 规约优于配置:Flyway 有一套默认的规约,所以不需要修改任何配置就可以正常使用。

* 既支持SQL 脚本,又支持Java 代码:可以使用SQL 脚本执行数据库更新,也可以使用Java 代码来进行一些高级数据升级操作。

        * 高可靠性:在集群环境下进行数据库升级是安全可靠的。

* 支持清除已存在的库表结构:Flyway 可以清除已存在的库表结构,可以从零开始搭建您的库表结构,并管理您的数据库版本升级工作。

* 支持失败修复。新的2.0 版本提供了repair 功能,用于解决数据库更新操作失败问题

简单说, 上面的特性不难理解,flyway 是通过版本号来控制自动升级的功能,通过约定来默认实现配置,通过SQL 脚本实现数据库更新控制。SQ脚本和JAVA代码本身不和平台有关,故可实现高可用。通过约定的版本号控制SQL脚本的执行,则可以清除已存在的库表结构。 

我个人比较倾向不和JAVA相关联,将Flyway 视为一种运维的工具, 故更推荐使用SQL脚本。

以下是官方的目录结构:

Flyway 一个方便集成的数据库版本管理工具_第1张图片

比较清晰,只要对应申明 目录结构即可。不一定要放在 migration 下面。 

我个人常用gradle 做打包和集成工具,故这里写一下简单的flyway在gradle 中的应用方式。

首先在build.gradle中,引入flyway 插件(插件开发比较容易,会一点groovy 就行了。这里具体不展开)

官方引入方式:

plugins {
    id "org.flywaydb.flyway" version "4.0"}

我比较常用的引入方式:

apply plugin: 'org.flywaydb.flyway'
//配置插件仓库
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.flywaydb:flyway-gradle-plugin:3.2.1"
    }

}

随后就是在build.gradle里面声明 flyway 参数了

ext{

    def prop = new Properties();
    file(" src/main/resources/jdbc -mysql.properties").withInputStream {
        prop.load(it)
    }
    prop.each {
        project.extensions.add("$it.key",it.value);

    }
}

flyway {
    user = project['jdbc.user']
    url= project['jdbc.url']
    password = project['jdbc.pass']
    locations=["filesystem:db/migration"]
}

比较倾向以上的读取方式,使用单独的 配置文件,管理数据库的配置。 

最后整理一下SQL的命名方式即可:

1。版本集成:

     前缀用V,随后跟随 版本号, 版本号之间用 单一下划线表示。 后面跟随2个下划线,后面跟随具体的描述。最后是后缀

2。可重复的集成 :

     前缀用R,随后跟随2个下划线,后面跟随具体的描述,最后是后缀

Flyway 一个方便集成的数据库版本管理工具_第2张图片

注意起步的版本号是 从1_0_0 开始的,故SQL脚本编码可以写1_0_1开始。

最后就是执行了,

首先执行 flywayBaseline 在数据库中建立 schema_version表,建立基础的版本信息,随后 执行 flywayMigrate 进行数据库脚本执行。

贴一下具体的tasks:

  • flywayMigrate:应用所有的迁移到最新版本,它会在你的DB中新建个表schema_version来存放每次升级的版本信息。

  • flywayClean:clean all objects

  • flywayInfo:打印所有的迁移的信息以及状态。

  • flywayValidate:迁移之前进行验证。

  • flywayBaseline:初始化schema_version表,并插入一条原始verion=1。

  • flywayRepair:它主要做了两件事,移除所有失败的迁移(升级),重置校验和。


第一个OSChina 的文章写完了,没有花多少时间, 但觉得还是挺满足的。











你可能感兴趣的:(flyway)