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到你看到 ...
随机推荐
- C++中对封装的语法支持——友元
友元 1.友元就是授权给某个函数.每个成员函数.某个类具有访问类内部私有成员的权限. 2.为什么用友元?友元可以允许某个类.函数直接访问类内部私有数据,减少函数调用开销,提高效率. 3.友元函数不是成 ...
- PHP Swoole长连接常见问题
连接失效问题例子其中,Redis常见的报错就是: 配置项:timeout报错信息:Error while reading line from the serverRedis可以配置如果客户端经过多少秒 ...
- nyoj 1364-治安管理 (INT_MAX)
1364-治安管理 内存限制:128MB 时间限制:3000ms 特判: No 通过数:6 提交数:6 难度:2 题目描述: SZ市是中国改革开放建立的经济特区,是中国改革开放的窗口,已发展为有一定影 ...
- python:沙盒(virtualenv)
当电脑需要使用多个版本的python时,可以使用沙盒:或者使用docker: virtualenv是Python自带的,通过pip安装的 [root@centos7 public]# cd jinji ...
- 理解Redis持久化
本文首发于:https://mp.weixin.qq.com/s/WVUGWuNrGoyY_7aDf7NNmA 微信公众号:后端技术指南针 0.前言 通俗讲持久化就是将内存中的数据写入非易失介质中,比 ...
- PHP数组具有的特性有哪些
PHP 的数组是一种非常强大灵活的数据类型.以下是PHP数组具有的一些特性: 1.可以使用数字或字符串作为数组键值 1 $arr = [1 => 'ok', 'one' => 'hello ...
- Vmware EXSI服务迁移无法访问故障处理
Vmware EXSI服务迁移无法访问故障处理 我们在做微服务平台服务时经常在构建IAAS时,因为硬件资源的扩容.缩减等可维护性问题需要迁移或者复制方式扩容方式来快速扩建集群节点,提高微服务运营的可靠 ...
- vue学习笔记(八)组件校验&通信
前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...
- python常见字符串操作
附: python2.x和python3.x中raw_input( )和input( )区别: 备注:1.在python2.x中raw_input( )和input( ),两个函数都存在,其中区别为r ...
- Scala函数式编程(四)函数式的数据结构 上
这次来说说函数式的数据结构是什么样子的,本章会先用一个list来举例子说明,最后给出一个Tree数据结构的练习,放在公众号里面,练习里面给出了基本的结构,但代码是空缺的需要补上,此外还有预留的test ...