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

1、Flyway简介:

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

2、Flyway工作流程:

最简单的场景就是在空数据库中使用Flyway:
Flyway组件的简介、工作流程和使用_第1张图片
Flyway会先去定位模式历史表,因为是空数据库,所以flyway找不到历史表,会直接来创建历史表,默认的表名是flyway_schema_history。
Flyway组件的简介、工作流程和使用_第2张图片
这张表用来追踪数据库的状态。

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

这些SQL文件会根据版本号进行排序,并按照顺序来执行。
Flyway组件的简介、工作流程和使用_第3张图片执行完一个SQL文件后,模式历史表的数据会进行相应的更新。

flyway_schema_history

Flyway组件的简介、工作流程和使用_第4张图片
有了元数据和初始化的状态之后,下面来看看更新数据库的版本。

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

剩下的高于历史表中版本的SQL文件会被标记为可以可用,
Flyway组件的简介、工作流程和使用_第5张图片
然后他们按照版本号排序并按照顺序执行
Flyway组件的简介、工作流程和使用_第6张图片

3、SpringBoot使用flyway组件

(1)pom中增加


    org.flywaydb
    flyway-core
    5.2.4

(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都会执行。

你可能感兴趣的:(JAVA)