一、什么是Flyway?

官网地址:flyway官网
Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。
Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
通俗的讲,Flyway可以像Git管理不同的人的代码那样,管理不同人的sql脚本,坐到数据库同步的功能。

二、SpringBoot中使用Flyway

1.引入依赖/jar包

新建SpringBoot项目;
在pom.xml文件中添加依赖;
注意:版本号默认,需要保持和spring-boot-starter-parent父版本号一致,自定义过高版本会出现不兼容情况 。

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

2.创建Flyway存放路径

resource下创建db\migration文件夹路径,(默认情况下是classth:db/migration,但你能够在配置中使用flyway.locations进行修改。)

3.Flyway sql脚本命令规则

db\migration文件夹下创建sql文件;
对于Flyway的脚本V<VERSION>__<NAME>.sql;
这里的VERSION使用下划线进行命名的方式;NAME:对当前脚本的描述,这里举例说明下:
V20220202__INSERT_STUDENT.sql:这就代表version=20220202,描述为向student表中插入数据;

4.使用es

如果使用ES的情况下,可以在db文件夹下创建文件夹es,在该路径下建立应用系统的版本号,例如V1.0.0
温馨提醒:其一这里的V字母要大写;其二version后面的下划线是两个下划线。
migration 后的SQL 脚本不应该再被修改,不然启动程序的时候会报错。

5.配置

想要启动Flyway功能,需要在application.yml中进行配置:

spring:
  flyway:
    # 数据库名称
    schemas: test
    # flyway自动配置 true 开启
    enabled: true
    #设定 SQL 脚本的目录,多个路径使用逗号分隔, 比如取值为 classpath:db/migration,filesystem:/sql-migrations
    locations:
      - classpath:db/migration
    # 如果数据库不是空表,需要设置成 true,否则启动报错
    baseline-on-migrate: true
    # 与 baseline-on-migrate: true 搭配使用
    baseline-version: 0
    encoding: UTF-8
    # 开发环境最好开启 outOfOrder, 生产环境关闭 outOfOrder .
    out-of-order: false
    # 禁止清理数据库表
    clean-disabled: true
    # 校验
    validate-on-migrate: true
    # 版本控制日志表,默认flyway_schema_history,不同系统建议修改改数据
    table: flyway_schema_history

三、Flyway流程简介

  • 首先配置好Flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储Flyway的运行信息,默认的数据库名字是FLYWAY_SCHEMA_HISTORY
  • 紧接着Flyway将开始扫描文件系统或应用程序的类进行迁移。然后,Flyway的数据迁移将基于对用sql脚本的版本号进行排序,并按顺序进行应用;
    可以看到执行数据库表之后checksum字段中会存储一个数值,用于在之后运行过程中对比sql文件执行是否有变化。
    checksum

四、错误总结/注意要点

1.注意要点

  • 版本的V的字母要大写;
  • version后面的下划线是两个下划线;
  • migration 后的SQL 脚本不应该再被修改,不然启动程序的时候会报错。

2.错误总结

Flyway出现:validate failed:detected failed migration to version

SpringBoot中使用Flyway出现:

  • 报错:
    org.flywaydb.core.api.FlywayException: Validate failed: Detected failed migration to version 1.0.9 (update)
    错误的原因可能是sql脚本和数据库中有冲突,需要检查sql脚本哪里错了。
  • 解决方法:
    检查数据库里有没有创建schema_version这个记录表,如果有的话检查更新到哪个版本sql了,可能是以前已经执行过的sql文件有了改动,尝试删除schema_version再重新运行项目;
    或者说是里面的sql有没有语法错误,在数据库里执行一下试试。
    也可以试着把flyway_schema_history表里的最后一行删掉,还有报错提示的数据语句也删掉;

如果错误,欢迎指出
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐