Flyway组件的简介、工作流程和使用

1、Flyway简介:

Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

2、Flyway工作流程:

最简单的场景就是在空数据库中使用Flyway:
在这里插入图片描述
Flyway会先去定位模式历史表,因为是空数据库,所以flyway找不到历史表,会直接来创建历史表,默认的表名是flyway_schema_history。
在这里插入图片描述
这张表用来追踪数据库的状态。

然后Flyway会立即扫描文件系统或者是应用程序指定的SQL文件目录,目录里存放的SQL文件可以用sql或者java来编写。

这些SQL文件会根据版本号进行排序,并按照顺序来执行。
在这里插入图片描述执行完一个SQL文件后,模式历史表的数据会进行相应的更新。

flyway_schema_history

在这里插入图片描述
有了元数据和初始化的状态之后,下面来看看更新数据库的版本。

Flyway会再一次扫描文件系统或者是应用程序指定的SQL目录,SQL文件会按照模式历史表来进行检查(注意,如果对于已经执行成功并记录到历史表中的SQL文件如果有修改,flyway会报错),如果SQL文件的版本低于或者等于历史表中已标记的版本,此SQL文件会被忽略。

剩下的高于历史表中版本的SQL文件会被标记为可以可用,
在这里插入图片描述
然后他们按照版本号排序并按照顺序执行
在这里插入图片描述

3、SpringBoot使用flyway组件

(1)pom中增加

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>5.2.4</version>
</dependency>

(2)注意druid需要升级为1.1.14版本及以上,旧版本和flyway同时使用有语句解析的bug。
(3)配置文件设置和说明

spring:
  datasource:
    druid:
      filter:
        wall:
          config:
            variant-check: false
            none-base-statement-allow: true
            comment-allow: true
            multi-statement-allow: true
  flyway:
    enabled: true
    # 如果数据库不是空库,需要设置成 true,否则启动报错
    baseline-on-migrate: true
    # 基准线版本版本号
    baseline-version: 1
    # 禁止清理数据库表
    clean-disabled: true
    locations: classpath:/sql/postgresql/init-sql
    table: flyway-service-name

flyway.location是sql文件的目录,sql文件的命名规则: V[version]__[description].sql

注意:名称中[version]和[description]之间是两个下划线!version只能有数字和"."构成,例如V1__init.sql,V1.1__data.sql。

flyway.table需要设置为flyway-[service-name]的规则,防止不同服务的之前的版本控制表冲突。

flyway.baseline-version 是基准线版本。基准线版本号默认为1。

举例说明基准线版本的使用:例如我们SQL文件目录下SQL文件为分别为V1__init.sql,V1.1__data.sql,基准线版本号设置分为以下两种情况:

①数据库中已经有了服务相关表和部分数据,我们需要保存这写结构和数据,就类似中途增加flyway的情况,我们可以把 baseline-version设置为1,这样V1__init.sql就不会执行,而V1.1__data.sql;如果设置为1.1,则V1__init.sql,V1.1__data.sql都不会执行以此类推。

②如果是最新的部署,数据中没有服务相关表结构和数据,也没有flyway的控制表,这时我们需要执行所以的sql文件,此时我们需要将 baseline-version设置为0.9,这样V1__init.sql,V1.1__data.sql都会执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值