文档章节

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

米拉快跑
 米拉快跑
发布于 2016/03/02 12:42
字数 1035
阅读 339
收藏 0

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

Flyway 的特性

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

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

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

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

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

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

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

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

以下是官方的目录结构:

比较清晰,只要对应申明 目录结构即可。不一定要放在 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个下划线,后面跟随具体的描述,最后是后缀

注意起步的版本号是 从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 的文章写完了,没有花多少时间, 但觉得还是挺满足的。











© 著作权归作者所有

米拉快跑
粉丝 1
博文 1
码字总数 1035
作品 0
技术主管
私信 提问
SpringBoot使用Flyway管理数据库版本

---title: SpringBoot使用Flyway管理数据库版本tags: springboot,flyway,数据库版本 grammar_cjkRuby: true SpringBoot使用Flyway管理数据库版本 介绍 Flyway 是一个简单开源数据库版本控制器...

Tree
2018/11/11
162
0
数据库版本管理工具Flyway——基础篇

api:http://flywaydb.org/getstarted/firststeps/api.html 1. 引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(...

引鸩怼孑
2015/09/09
298
0
Spring、Spring Boot 和 TestNG 测试指南 ( 5 )

原文出处:chanjarster Spring Test Framework提供了对JDBC的支持,能够让我们很方便对关系型数据库做集成测试。 同时Spring Boot提供了和Flyway的集成支持,能够方便的管理开发过程中产生的...

chanjarster
2017/12/11
0
0
数据库版本管理工具Flyway应用

Flyway介绍 Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要...

吴伟祥
03/26
39
0
eoolife/hooray-osc

#hooray-mp(一套基于SpringBoot上的开发基础集成) PS: QQ群:554750593 TODO 1. Mybatis Spring Boot 1.0.1 正式版出炉了,项目里需要集成....满满的都是工作量 一个基于Spring Boot之上的B...

eoolife
2016/03/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
4
0
程序性能checklist

程序性能checklist

Moks角木
昨天
6
0
VUE 计算属性

本文转载于:专业的前端网站▶VUE 计算属性 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>vue示例</title> </hea......

前端老手
昨天
5
0
快速搭建LNMT平台和环境部署 Tomcat详解

Tomcat部署的基本概念 1. CATALINA_HOME与CATALINA_BASE分别指什么?     CATALINA_HOME指的是Tomcat的安装目录     bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/start...

网络小虾米
昨天
6
0
float浮动

float浮动 float浮动概念及原理: 文档流:文档流是文档中可显示对象在排列时所占用的位置。 加浮动的元素,会脱离文档流,会沿父容器靠左或靠右排列,如果之前已经有浮动的元素,会挨着浮动...

studywin
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部