Flyway使用说明
Flyway简介
Flyway是源自Google的数据库版本控制插件。项目开发中,数据库往往需要随着软件版本进行变化,相比起手动执行SQL脚本,flyway可以实现自动化的数据库版本修改,让开发/测试等环境的部署更加Easy。例如:
模块A从版本1.0.0升级到1.2.0,需要在student表中添加2个字段并赋予默认值。
- 传统方式:升级模块A时,需要运维大佬同时执行ddl脚本修改表字段+dml脚本赋予默认值,否则程序会报错。如果环境比较多,那么部署其实是一个比较麻烦的事。
- Flyway:把对数据库做修改的sql放入到flyway的目录,模块A升级后,启动时会自动执行sql脚本,运维无需关心数据库的改动。
Flyway使用简介
Flyway基本原理
Flyway的核心就是db.migrate这个文件夹和flyway_schema_history表。db.migrate下每个sql文件对应flyway_schema_history的一条记录。
如下图:

Flyway会在数据库中维护一张flyway_schema_history表。如下图:

表中字段说明:
- installed_rank 脚本执行编号,自动累加
- version 数据库版本号,由用户定义(后续会解释)
- description 版本修改说明,用户编写
- type 脚本类型,一般都是SQL
- script 脚本文件名
- checksum 这是对脚本文件进行CRC32运算得到的数值,用以确保已经执行过的sql脚本不会再发生变化
- installed_by 脚本运行的DB用户
- installed_on 脚本运行时间
- execution_time 脚本执行耗时(ms)
- success 脚本是否执行成功
当引入了flyway的项目启动时,运行flyway.migrate()方法(Spring Boot引入会自动执行),Flyway会将db.migrate文件夹中的sql脚本和数据库flyway_schema_history表做对比,当检测到db.migrate中存在版本号大于flyway_schema_history最新版本的SQL脚本时,就会执行脚本,并更新flyway_schema_history表。
Flyway默认约定
Flyway遵循约定大于配置的原则,有一些默认的约定,按照约定创建脚本,flyway就可以自动识别并执行。
| 属性 | 约定 | 说明 |
|---|---|---|
| 版本控制表 | flyway_schema_history | 数据库中版本控制的表名,默认就是flyway_schema_history,可配置 |
| 脚本路径 | db/migrate | 默认SQL脚本的存放路径,是相对于classPath的相对路径 |
| 脚本文件命名规则 | V/R__.sql | 这是Flyway约定的脚本文件命名。 |
脚本文件命名规则
Flyway的脚本文件命名有以下规则:
首先是大写字母 V/R,然后是版本号,要是有小版本可以用下划线隔开,例如 2_1,版本号后面是两个下划线,然后是脚本名称,文件后缀是 .sql。
- 以V或者R开头
- V表示这个脚本是版本控制脚本,只会执行一次,如果在执行之后修改该脚本,则运行flyway.migrate()时flyway会报错(checksum校验失败);
- R表示这是个可重复运行脚本,每次修改这个脚本,flyway.migrate()执行时都会再次执行这个脚本;
- 版本号
版本号之间如果有小版本,以下划线隔开 - 版本修改说明
版本号和版本修改说明之间以两个下划线隔开,版本说明的单词之间以下划线隔开
例如V1_0_0_3__change_thing_parent_to_code.sql,则是说明这是一个版本号为1.0.0.3的数据库版本脚本,说明就是change thing parent to code。
Flyway可配置项
默认情况下建议遵循Flyway的默认约定,就可以很流畅地使用flyway进行数据库版本控制了。如果确实需要做一些调整,Flyway的约定项都是可以配置的,参照以下:
spring:
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验,默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
Flyway使用配置
Spring Boot方式
- POM
pom里引入依赖<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
- 建立文件夹
在resources文件夹下新建文件夹db/migrate - 编写SQL脚本
Flyway使用说明的更多相关文章
- Flyway客户端使用
一.flyway介绍 Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式.Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- 生产环境中,数据库升级维护的最佳解决方案flyway
官网:https://flywaydb.org/ 转载:http://casheen.iteye.com/blog/1749916 1. 引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的 ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
随机推荐
- switch分支语句
语句句式 Calendar c = Calendar.getInstance(); //获得一周的某天 int i = c.get(Calendar.DAY_OF_WEEK); switch (i) ...
- 九、配置Tomcat集群
配置Tomcat集群所需服务器三台:192.168.1.5(调度服务器).192.168.1.10(WEB1),192.168.1.20(WEB2) 1.调度服务器设置 [root@proxy ~]# ...
- Zab协议 (史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 【题解】Luogu p2016 战略游戏 (最小点覆盖)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- tree (一本通练习||清华集训互测)
tree 内存限制:512 MiB 时间限制:3000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ...
- 入门实践丨如何在K3s上部署Web应用程序
在本文中,我们将使用Flask和JavaScript编写的.带有MongoDB数据库的TODO应用程序,并学习如何将其部署到Kubernetes上.这篇文章是针对初学者的,如果你之前没有深度接触过Ku ...
- Linux-远程服务ssh
1.远程管理服务介绍 (1)SSH是(Secure Shell Protocol)的简写,由IETF网络工作小组制定:在进行数据传输之前,SSH先对联机数据包通过加密技术进行机密处理,加密后在进行文件 ...
- 通过busybox制作根文件系统详细过程
我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...
- 8、ITSM基本概念(2)
6.流程和职能: 7.故障管理: (1)故障管理的输入和输出: (2)故障管理的目标: 优先解决影响度大的事件: (3)故障管理的指标: (4)故障管理的流程: 8.问题管理: (1)问题管理的输入和 ...
- solidity 小案例 收费站
solidity IDE下载地址 https://pan.baidu.com/s/1cY8VgDqB9Wt9VzK-Nocbyw 代码案例: pragma solidity ^0.4.0; //创建合 ...