数据库版本管理工具--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中的pyc和pyo文件和__pyc__文件夹
一.命令生成 pyc 文件 *.py:源码文件,由 Python 程序解释. *.pyc:源码经编译后生成的二进制字节码(Bytecode)文件. *.pyo:优化编译后的程序,也是二进制字节码文件. ...
- Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) A. CME
链接: https://codeforces.com/contest/1241/problem/A 题意: Let's denote correct match equation (we will d ...
- Spring Boot 前期篇
在学习springboot之前,学习一下Spring的java配置. 1. Spring的发展 1.1. Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的 ...
- DNS服务基础
DNS服务器的功能 – 正向解析:根据注册的域名查找其对应的IP地址 – 反向解析:根据IP地址查找对应的注册域名(不常用) NS(声明DNS记录) A(正向解析记录) CNAME(解析记录别名) 安 ...
- JavaScript变量、作用域和内存问题总结
㈠理解基本类型和引用类型的值 ⑴JavaScript变量可以用来保存两种类型的值:基本类型值和引用类型值. ⑵基本类型的值源自以下 5 种基本数据类型:Undefined.Null.Boolean. ...
- 题解 BZOJ1026 & luogu P2657 [SCOI2009]windy数 数位DP
BZOJ & luogu 看到某大佬AC,本蒟蒻也决定学习一下玄学的数位$dp$ (以上是今年3月写的话(叫我鸽神$qwq$)) 思路:数位$DP$ 提交:2次 题解:(见代码) #inclu ...
- js上传整个文件夹
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- ActiveMQ介绍
一.背景 中间件 由于业务的不同.技术的发展.硬件和软件的选择有所差别,导致了异构组件或应用并存的局面.要使这些异构的组件协同工作,一个有效的方式就是提供一个允许它们进行通信的层,该层即为中间件. 在 ...
- INLINE HOOK过简单驱动保护的理论知识和大概思路
这里的简单驱动保护就是简单的HOOK掉内核API的现象 找到被HOOK的函数的当前地址在此地址处先修改页面保护属性然后写入5个字节.5个字节就是一个简单的JMP指令.这里说一下JMP指令,如下: 00 ...
- [Luogu] 树
https://www.luogu.org/problemnew/show/P4092 树剖 + 线段树区间修改,单点查询 #include <bits/stdc++.h> using n ...