当前位置 : 首页 » 文章分类 :  开发  »  Flyway

Flyway

Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。
Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成SQL脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

Flyway 的主要任务是管理数据库的版本更新,在Flyway 中称每次数据库更新为一个migration。
Flyway 支持SQL-based migrations 和Java-based migrations 。
Flyway 支持的数据库脚本有sql 脚本与java 代码,sql 脚本即普通的sql 脚本,包含创建数据库、表,更新库表结构,数据插入、更新、删除等sql 语句,java 代码则是通过一个有效的数据源,使用java 语言来进行数据库的操作,这里针对的读者是对数据库操作有一定熟悉程度的群体,不再详细讲解如何编写数据库脚本。

flyway归约

Flyway 的sql 脚本与java 代码都遵循以下默认规约:
SQL 脚本文件默认位置是项目的源文件夹下的 db/migration 目录。
Java 代码默认位于 db.migration 包。
SQL 脚本文件及Java 代码类名必须遵循以下命名规则:V<version>[_<SEQ>][__description] 。版本号的数字间以小数点 . 或下划线 _ 分隔开,版本号与描述间以连续的两个下划线 __ 分隔开。如 V1_1_0__Update.sql, V1__create_table_A.sql, V2__create_index_on_field_1. Java 类名规约不允许存在小数点,所以Java 类名中版本号的数字间只能以下划线进行分隔。
采取左对齐原则,缺位用 0 代替。例如 1.1 比 1.0 版本高,1.1.1 比 1.1 版本高,而 1.1.01 和 1.1.1 版本一致。并且,它们会按照版本排序且顺序执行。

Versioned migrations(V1.1__xxx)

一般常用的是 Versioned 类型,用于版本升级,每一个版本都有一个唯一的标识并且只能被应用一次,并且不能再修改已经加载过的Migrations,因为Metadata表会记录其Checksum值。其中的version标识版本号,由一个或多个数字构成,数字之间的分隔符可以采用点或下划线,在运行时下划线其实也是被替换成点了,每一部分的前导零会被自动忽略。

Repeatable migrations(R__xxx)

Repeatable是指可重复加载的Migrations,其每一次的更新会影响Checksum值,然后都会被重新加载,并不用于版本升级。对于管理不稳定的数据库对象的更新时非常有用。Repeatable的Migrations总是在Versioned之后按顺序执行,但开发者必须自己维护脚本并且确保可以重复执行,通常会在sql语句中使用CREATE OR REPLACE来保证可重复执行。

配置好数据库连接,执行flyway migrate命令,flyway会自动执行需要的脚本(比如在空数据库执行,会顺序执行V1和V2两个脚本,而在和V1版本一致的数据库执行,只会执行V2脚本),把数据库更新到最新状态。

在第一次执行flyway migrate的时候,flyway会在数据库中建立一张默认命名为 schema_version 的表 新版本是 flyway_schema_history 表,用于跟踪该数据库实例的schema版本变更。

除了migrate,flyway还支持clean, validate, baseline等命令。

Flyway 助力数据库脚本自动化管理攻略
https://mp.weixin.qq.com/s/v43FA51VU8LBGtkCcCPpew

数据库版本管理工具Flyway应用
https://juejin.im/post/5b7449736fb9a009bb754171

上一篇 北京口腔医院看牙记录

下一篇 Pinpoint

阅读
评论
961
阅读预计3分钟
创建日期 2019-10-22
修改日期 2019-11-21
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论