SpringBoot中使用Flyway

一、什么是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表里的最后一行删掉,还有报错提示的数据语句也删掉;

如果错误,欢迎指出
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个小坑货

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值