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 使用说明 转载 ...
随机推荐
- 达芬奇架构NPU
达芬奇架构NPU 达芬奇架构的核心优势是什么?如何更好地赋能麒麟990? 达芬奇架构,是华为自研的面向AI计算特征的全新计算架构,具备高算力.高能效.灵活可裁剪的特性,是实现万物智能的重要基础.具体来 ...
- NVIDIA空中导航SDK改造5G通信
NVIDIA空中导航SDK改造5G通信 Transforming Next-Generation Wireless with 5T for 5G and the NVIDIA Aerial SDK N ...
- adb安装 mac和Windows
一.mac安装 参考地址https://blog.csdn.net/VSRfind/article/details/79593098 1.首先安装一个软件 在用Mac进行Android开发之前,我们一 ...
- Java SSM框架理论知识
一.Spring理论知识 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心:1.IOC/DI(控制反转/依赖注入 ...
- Task05:SQL高级处理
5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数.OLAP 是OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理. ...
- 【NX二次开发】调整视图大小
调整视图大小 tag_t tagView; UF_VIEW_ask_work_view(&tagView); UF_VIEW_fit_view(tagView, 0.7);//if NULL_ ...
- noip2012 总结
Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密码.Vigenère 密码的加密解密算法简单易用,且破译 ...
- Shiro-JWT SpringBoot前后端分离权限认证的一种思路
JWT-Shiro 整合 JWT-与Shiro整合进行授权认证的大致思路 图示 大致思路 将登录验证从shiro中分离,自己结合JWT实现 用户登陆后请求认证服务器进行密码等身份信息确认,确认成功后 ...
- linux下 大日志文件查看与搜索---less
场景 有一个几十m的大日志文件,里边的记录是按时间排序的. 现在需要找到其中,不知道在什么位置的一条错误消息.这时候,想把内容拷出来都费劲,就算拷出来了,一般的编辑器也难以hold住这么大的文件.这时 ...
- Golang中的各种时间操作
Golang中的各种时间操作 需求 时间格式的转换比较麻烦,自己写了个工具,可以通过工具中的这些方法相互调用转成自己想要的格式,代码如下,后续有新的函数再添加 实现代码 package utils i ...