数据库版本管理工具--Flyway的使用
软件开发正常流程是:开发环境 ---> 测试环境 ----> 产环境
在开发过程中经常需要变更数据库:
- 表结构变更。
- 基础数据变更。
最直接的做法是:用客户端连上数据库直接修改。 依次修改开发、测试、正式环境。
这样做的风险是:
- 容易漏改,经常会造成开发、测试、生产环境数据结构不一致导致程序异常,排查错误浪费了大量时间。
- 没有记录下修改过程,数据结构出现问题很难复盘出历史修改过程。
- 完全靠人工约束,给项目管理增加额外难度。
改进方案:
所有数据库修改都需要通过sql 语句修改,sql语句同源代码一样纳入版本控制系统(如git),采用工具(flyway等)自动在不同环境执行sql语句,流程如下:
- 开发:将本次数据库改动写成sql语句放到文件中,在开发环境执行flyway让数据库改动生效。
- 测试:项目上线到测试环境前,先执行flyway 。
- .上线:在正式环境执行flyway.
如何使用
项目介绍:
官网: https://flywaydb.org/getstarted/firststeps/maven
源码:https://github.com/flyway/flyway
该项目是非常活跃的项目,如下图:

运行方式:
flyway 支持多种用运行方式:
插件模式:
可以作为ant maven gradle 的插件运行 ,这种模式不用写代码,只需要配置就OK了。
编码模式:
flyway 提供了接口,可以在通过编写代码来运行。
运行:
按照文档https://flywaydb.org/getstarted/firststeps/maven 一步一步操作:
- 新建一个maven 项目:


- 导入到IDEA 后如下图:

注意问题:
- 文件命名规则: 必须以 V数字__ 开头,否者无法通过。
- 文件命名规则: V1__xx V2__xxx 数字必须连续性,否则,无法运行。

一旦执行入库,则文件不能再修改,每次执行之前会进行文件md5校验。
删除文件对应的数据库记录后方可再次执行(不建议这么做,这么做会引起版本的混乱)。
源码解读:
1.用git命令将该项目clone下来:
2.将项目导入到你熟悉的IDE 中(如intellij 或者 Eclipse),这是一个maven 项目,需要按照maven项目导入,导入需要下载很多jar包,比较耗时。导入后如下图:

优缺点:
优点:
1.原理简单,使用方便。
缺点:
- 没有引入并发控制,如果在两台机器上并行执行该命令,则并发情况下可能执行两边,如果是 update t1=t1+1 where id=1 ,那么会导致结果错误。
类似项目:
这个工具提供比flyway 更强大的功能,flyway几乎是liquibase 的一个子集。
工具并不是越强大越好,正确的做法是根据需求灵活选择。
Java开发、互联网架构讨论QQ群: 297702426
邮箱:zfj321@qq.com 需要源码可以联系我,或者加入以上QQ群
数据库版本管理工具--Flyway的使用的更多相关文章
- [jOOQ中文]3. 数据库版本管理工具Flyway
https://segmentfault.com/a/1190000010526452 在执行数据库迁移时,我们推荐使用jOOQ与Flyway - 数据库迁移轻松. 在本章中,我们将简单的来使用这两个 ...
- 数据库版本管理工具Flyway(4.0.3)---介绍(译文)
Flyway Evolve your Database Schema easily and reliably across all your instances 简单的.可靠的升级(发展)你的数据库模 ...
- 数据库版本管理工具Flyway——基础篇
Flyway 默认规约 SQL 脚本文件默认位置是项目的源文件夹下的db/migration 目录. Java 代码默认位于db.migration 包. SQL 脚本文件及Java 代码类名必须遵循 ...
- 数据库版本管理工具Flyway(4.0.3)---工作机制(译文)
How Flyway works The easiest scenario is when you point Flyway to an empty database. 最容易的方案是Flyway指向 ...
- 数据库版本管理工具flyway
引入flyway_core jar包 java 代码实现 public class FlywayMigration { @Resource private DataSource dataSource ...
- 【flyway】开源的数据库版本管理工具【migration】
开源的数据库版本管理工具[migration] 记录
- 在SpringBoot中使用flyway进行数据库版本管理
本文大纲 flyway是什么 能帮助我们解决什么问题 springboot环境下使用flyway flyway的工作原理 一.flyway是什么 Flyway是一个开源的数据库版本管理工具,并且极力主 ...
- Java敏捷数据库迁移框架——Flyway
1.引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(开发.测试.维护人员)能够讲清楚当前环境下的数据库是哪个版本,与哪个版本的应 ...
- 使用alembic进行数据库版本管理
前言 随着项目业务需求的不断变更,数据库的表结构修改难以避免,此时就需要对数据库的修改加以记录和控制,便于项目的版本管理和随意的升级和降级. Alembic就可以很好的解决这个问题.Alembic是S ...
随机推荐
- python+Appium自动化:MultiAction多点触控
MultiAction MultiAction 是多点触控的类,常用于模拟用户多点操作. 主要包含这add()还有perform()两个方法,模拟多点触控,需要导入TouchAction还有Multi ...
- All-in-One Office,不容错过的办公插件
WPS Office是由金山自主研发的一款办公软件套装,具备办公软件最常用的文字.表格.演示等多种功能. 这款国产办公软件不仅免费,而且具有内存小.海量模板.兼容性强.操作更加符合中国人使用习惯等 ...
- 利用 canvas 实现压缩图片
/** * nase64Data --> 要压缩的图片base64数据 * width --> 宽度 * height --> 高度 * _callback --> 回调函数 ...
- java中volatile关键字的含义(转载)
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并发的问题,在语 ...
- HTTP 协议讲解
http请求由三部分组成,分别是:请求行.消息报头.请求正文 HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接 ...
- [Luogu] 时间复杂度
https://www.luogu.org/problemnew/show/P3952 考场上输出的是 "YES" "NO" ++ ,如果不是亲身经历,打死我我 ...
- Tomcat怎么关闭日志输出
tomcat中禁用catalina.out的输出,又可能很大. 1.直接修改catalina.sh文件的输出语句. 在文件中找到以下内容. if [ -z "$CATALINA_OUT&qu ...
- 阿里云Ubuntu安装LNMP环境之Nginx
在QQ群很多朋友问阿里云服务器怎么安装LNMP环境,怎么把项目放到服务器上面去,在这里,我就从头开始教大家怎么在阿里云服务器安装LNMP环境. 在这之前,我们先要知道什么是LNMP. L: 表示的是L ...
- Python数据挖掘-文本挖掘
文本挖掘概要 搞什么的? 从大量文本数据中,抽取出有价值的知识,并且利用这些知识更好的组织信息的过程. 目的是什么? 把文本信息转化为人们可利用的知识. 举例来说,下面的图表利用文本挖掘技术对库克ip ...
- 虚拟机扩展Linux根目录磁盘空间
简要扩展空间方法http://www.kwx.gd/CentOSApp/Xen-Centos6-Mounted-HardDrive.html 最近在VMware虚拟机上使用Centos,用着用着,发现 ...