Flyway学习和使用

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值