FlyWay工作原理
本文译自Flyway官方文档,原文地址https://flywaydb.org/getstarted/how
当你最开始将FlyWay指向一个空数据库时。

它会试着去查找schema历史表,如果此时数据库是空的,则FlyWAY会自己创建一张历史表 。
你现在就有了个仅包含空表flyway_schema_history(默认)的数据库

这张表将会追踪数据库的状态,
随后flyway会立即扫描应用的文件系统或类路径(classpath)以用于迁移,Sql或Java文件都可以支持迁移。
迁移会按照版本号进行排序并依次执行:

随着每次迁移被执行,schema_history历史表会依此更新记录
flyway_schema_history
|
installed_rank |
version |
description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
|
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 |
546 |
true |
|
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 |
127 |
true |
现在,元数据与初始状态都已就位,可以讨论下迁移到新版本了
Flyway会再次扫描应用的文件系统和类路径,迁移依据历史表检查,如果版本号低于或等于当前版本号,则忽略迁移操作。
剩下的迁移是增量迁移(pending
migrations),准备就绪,但未执行

它们会按照版本号排序并依次执行:

schema_history历史表会依此更新记录:
flyway_schema_history
|
installed_rank |
version |
Description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
|
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 |
546 |
true |
|
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 |
127 |
true |
|
3 |
2.1 |
Refactoring |
JDBC |
V2_1__Refactoring |
axel |
2016-02-10 17:45:05.4 |
251 |
true |
这便是所有的过程了。That’s it! 每次数据库需要改进时,无论是DDL或DML,只要创建一个版本号高于目前版本的迁移就行,下次Flyway启动时,它会依次进行数据库的升级操作。
DDL: Data Definition Language 数据库定义语言
DML: Data Manipulation Language 数据库操作语言
FlyWay工作原理的更多相关文章
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- 浏览器内部工作原理--作者:Tali Garsiel
本篇内容为转载,主要用于个人学习使用,作者:Tali Garsiel 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到 ...
随机推荐
- 二.整体预览tomcat
一.概述 如果将tomcat内核高度抽象,则它可以看成由连接器(Connector)组件和容器(Container)组件组成,其中Connector组件负责在服务器端处理客户端链接,包括接受客户端链接 ...
- nyoj 773-开方数 (pow)
773-开方数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:8 难度:3 题目描述: 现在给你两个数 n 和 p ,让你求出 p 的开 n 次方. 输入描述: 每组数 ...
- 力扣(LeetCode)Excel表列名称 个人题解
给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...
- 力扣(LeetCode)长按键入 个人题解
你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...
- [FPGA]Verilog实现可自定义的倒计时器(24秒为例)
目录 想说的话... 样例_边沿检测计数器 代码讲解 仿真演示 拓展_自定义倒计时数和倒计时间隔 代码讲解 仿真演示 总结 实例_24秒倒计时器 想说的话... 本次实现的是一个24秒倒计时器,功能顾 ...
- Jrebel 激活的方法
jrebel 激活的方法: 试了很多都不好用,下面这个方法比较简单快捷.(不知道可以坚持多久) myjrebel 7月分官方正式停用,致使广大朋友无法使用jrebel/XRebel,可按如下地址进行 ...
- 程序员常用6 个 Python 的日期时间库
内建的 datetime 模块 在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象. 假设我们从 API 接受到一个日期字符串, ...
- python3 之 判断闰年小实例
一.方法1: while True: try: year = int(input('请输入一个年份:')) if (year % 4) == 0 and (year % 100) != 0 or (y ...
- java Math类常用方法
package com.niuke.test; public class MathDemo { public static void main(String args[]){ /** * abs求绝对 ...
- 寻找键盘bug
被这句阻拦了