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
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: