1、什么是Flyway

Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration.

It is based around just 7 basic commands: Migrate, Clean, Info, Validate, Undo, Baseline and Repair.

Flyway是一款开源的数据库迁移工具。强力支持简单性和约束性而不是配置。

通俗来讲,我们的代码可以通过git或svn来进行版本管理,项目运行环境可以通过镜像或者dockerfile来创建,而Flyway就是用来进行数据库的版本管理的。

以前的工作流程:

  • 开发人员将应用程序打包,并整理好数据库脚本

  • 运维人员拿到部署包,先检查数据库脚本,进行备份、执行,再部署应用程序

引入Flyway:

  • 开发打包

  • 运维直接替换,不用管数据库的改动。脚本全交给Flyway执行


有了Flyway,所有开发人员能时刻关注DML、DDL对数据库的改变,持续集成会方便很多

相当于一个脚本管控工具,谁提交的,谁更改的,ddl还是dml语句,都可以进行追溯和管理

2、基本使用

  1. 创建一个基本的boot demo,并配置数据库

  2. 添加依赖,或也可以在新建boot demo的时候选择Flyway

<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>8.2.2</version>
</dependency>
  1. 在resource下新建db.migration文件夹,里面主要放脚本。

  1. 直接运行,可以看到
    启动信息:

数据库:
可以发现,company和department是db.migration文件夹里的sql脚本创建的
flyway_schema_history表是Flyway自动创建的,用来标识版本

3、深入学习

1、[How Flyway works ](How Flyway works - Flyway by Redgate • Database Migrations Made Easy.)

2、[配置文件说明](Config Files - Config Files - Flyway by Redgate • Database Migrations Made Easy.)

3、[migrations命名](Migrations - Migrations - Flyway by Redgate • Database Migrations Made Easy.)

4、常用

1、常用配置

## 设定 db source 属性
spring.datasource.url=jdbc:mysql://localhost:3306/world
spring.datasource.username=root
spring.datasource.password=toor## 设定 flyway 属性
spring.flyway.cleanDisabled = true # flyway 的 clean 命令会删除指定 schema 下的所有 table, 杀伤力太大了, 应该禁掉.
spring.flyway.enabled = true# 启用或禁用 flyway
spring.flyway.locations =classpath:db/migration# 设定 SQL 脚本的目录,多个路径使用逗号分隔, 比如取值为 classpath:db/migration,filesystem:/sql-migrations
spring.flyway.baselineOnMigrate=true# 如果指定 schema 包含了其他表,但没有 flyway schema history 表的话, 在执行 flyway migrate 命令之前, 必须先执行 flyway baseline 命令.# 设置 spring.flyway.baseline-on-migrate 为 true 后, flyway 将在需要 baseline 的时候, 自动执行一次 baseline.
spring.flyway.baselineVersion=1 # 指定 baseline 的版本号,缺省值为 1, 低于该版本号的 SQL 文件, migrate 的时候被忽略.
#spring.flyway.encoding=# Encoding of SQL migrations (default: UTF-8)
spring.flyway.table=flyway_schema_history_myapp# 设定 flyway 的 metadata 表名, 缺省为 flyway_schema_history
spring.flyway.outOfOrder=true# 开发环境最好开启 outOfOrder, 生产环境关闭 outOfOrder .
#spring.flyway.schemas=# 需要 flyway 管控的 schema list, 缺省的话, 使用的时 dbsource.connection直连上的那个 schema, 可以指定多个schema, 但仅会在第一个schema下建立 metadata 表, 也仅在第一个schema应用migration sql 脚本. 但flyway Clean 命令会依次在这些schema下都执行一遍.

2、脚本命名

  • 开发环境建议采用时间戳的形式作为版本号。V20211215.14.48__V1.2_add_user_name.sql

  • 生产环境应该是手动merge开发环境的脚本,然后按正常版本号命名。V1.2___001_add_user_name.sql

3、不允许修改migration后的sql(Versioned Migraties)。可以修改可重复执行迁移(Repeatable Migrations)

4、spring.flyway.outOfOrder 取值 true /false
对于开发环境, 可能是多人协作开发, 很可能先 apply 了自己本地的最新 SQL 代码, 然后发现其他同事早先时候提交的 SQL 代码还没有 apply, 所以 开发环境应该设置 spring.flyway.outOfOrder=true, 这样 flyway 将能加载漏掉的老版本 SQL 文件; 而生产环境应该设置 spring.flyway.outOfOrder=false

5、多个系统公用要 DB schema
很多时候多个系统公用一个 DB schema , 这时候使用 spring.flyway.table 为不同的系统设置不同的 metadata 表, 缺省为 flyway_schema_history

Flyway学习和使用相关推荐

  1. Maven学习总结(33)——开发人员如何使用 Flyway 插件管理数据库版本

    一.前言. 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(开发.测试.维护人员)能够讲清楚当前环境下的数据库是哪个版本,与哪个版本的 ...

  2. Java基础学习总结(183)—— Flyway 在项目中迁移数据实践

    一.问题产生 项目在多环境迭代开发过程中,数据库的表结构不断变更,在部署时,往往会出现数据库表结构未及时变更导致出现问题,耗费在表结构上的时间相当多,上线过程持续痛苦,代码有 GIT/SVN 来控制, ...

  3. Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较

    前言 当您需要使用Java创建Web应用程序或API时,可以使用RESTful,SOAP或GraphQL.无论您是查看同步HTTP,异步还是反应式,队列中的消息或来自Kafka的事件,都很难超越Spr ...

  4. flyway常用配置_Flyway学习笔记

    对于降级操作(downgrade scripts/downward migrations)的支持 Flyway does NOT support downgrade scripts. While th ...

  5. 零基础学习Java培训有什么攻略

    零基础学习Java培训有什么攻略?java是主流编程语言之一,我们在学习Java的时候需要制定Java学习路线图,Java涉及到的知识点非常的多,我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介 ...

  6. 零基础学习java软件开发攻略

    Java是主流开发语言,应用普遍.Spring Boot是Java开发时常用框架,有非常丰富的组件和易用的功能.实际开发工作中涉及到的知识点比较多,将它们分门别类,专题攻关,由点到面,学习效率非常高. ...

  7. Flyway 执行报错: 'user_variables_by_thread' 表没有SELECT权限问题

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 分享一个最近在整Flyway时候碰到的一个问题,以及对应 ...

  8. Spring Boot中使用Flyway来管理数据库版本

    久违了的Spring Boot系列,今天抽空更新一篇.之前写过很多篇关于数据访问的文章了,比如下面这些: 使用JdbcTemplate 使用Spring-data-jpa简化数据访问层(推荐) 多数据 ...

  9. flyway常用配置_Spring Boot 2 实战:使用 Flyway 管理你数据库的版本变更

    1. 前言 随着项目的不断迭代,数据库表结构.数据都在发生着变化.甚至有的业务在多环境版本并行运行.数据为王的时代,管理好数据库的版本也成为了迫切的需要.如何能做到像 Git 之类的版本控制工具来管理 ...

最新文章

  1. ASP.NET中的母版页
  2. c# 非阻塞算法_c#创建非阻塞tcp通信
  3. scanf函数详解与缓冲区
  4. 详解“FTP文件传输服务”安装配置实例
  5. SegmentFault D-Day 北京:大数据
  6. D04——C语言基础学PYTHON
  7. 安装win7和centos6.7双系统 引导加载安装位置问题
  8. Java IO: 序列化与ObjectInputStream、ObjectOutputStream
  9. 在Python,Java和Kotlin中标记参数和重载
  10. js时间搓化为今天明天_秋冬国产搓背神器!360°无死角,让你搓背不求人,太舒服了...
  11. Citrix Netscaler版本管理和选择
  12. Http Header的Transfer-Encoding
  13. [记录] Ubuntu 配置Apache虚拟站点
  14. 改进3D/2D U-NET--添加深度监督deep supervision【Keras】
  15. 在2003上实现Custom Task Pane
  16. html psd设计图,根据PSD登陆页面设计稿切图制作HTML网页全过程
  17. C语言运行机制(过程)简述
  18. Animation 动画介绍和实现
  19. 互联网产品的运营指标
  20. 记录下生活:ETC卡充值(上海)

热门文章

  1. 如何选择适合你的兴趣爱好(三十二),养花
  2. 字节、字、bit、byte到底咋回事
  3. C#调用GhostScript,O2S.Components转换PDF为图片
  4. 【HDOJ】1493 QQpet exploratory park
  5. 通达信指标公式编写常用函数(六)——SUM、IF
  6. 开心测试卷答案软件六下外研版,外研版英语六年级小升初测试卷含答案
  7. speak failed:not bound to TTS engine解决方案
  8. Springboot YAML语法
  9. Rio手把手教学:如何打造容器化应用程序的一站式部署体验
  10. win10自带搜索()带有括号或者特殊符号的方法