Flyway 使用手记

2021-03-31  本文已影响0人  Kindey_S

Flyway简介

Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。

常规项目部署应用的流程大概是这样的:

引入Flyway之后的应用部署流程大概是这样的:

Flyway使用

引入jar包

  1. dependency
<dependencies>
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>5.0.3</version>
    </dependency>
</dependencies>
  1. build
<build>

    <plugins>
        <plugin>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-maven-plugin</artifactId>
            <version>5.0.3</version>
        </plugin>
    </plugins>
</build>

配置信息

配置文件中添加如下配置信息

flyway:
  # 是否启用flyway
  enabled: true
  ## 编码格式,默认UTF-8
  encoding: UTF-8
  ## 迁移sql脚本文件存放路径,默认db/migration
  locations: classpath:db/migration
  ## 迁移sql脚本文件名称的前缀,默认V
  sqlMigrationPrefix: V
  ## 迁移sql脚本文件名称的分隔符,默认2个下划线__
  sqlMigrationSeparator: __
  # 迁移sql脚本文件名称的后缀
  sqlMigrationSuffixes: .sql
  # 迁移时是否进行校验,默认true
  validateOnMigrate: true
  # 设置为true,当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
  baselineOnMigrate: true

resources 目录下,手动创建 db/migration 目录,文件命名格式:V_1__initDb.sql。

运行

将包含sql的脚本文件按命名规范生产脚本文件并放置到指定目录,启动项目时项目会自动执行。

使用问题记录

回滚

flyway收费版本支持try run以及rollback操作,免费版就只能自己处理了(▼ヘ▼#) 。

报错1:SQL错误

如下图,如果脚本中的sql在执行的时候发生sql错误会有明确提示信息,需要根据提示信息对脚本或者数据做响应的处理,并删除执行记录表(flyway_schema_history)中的对应记录

SQL报错

如果没有删除执行记录会报如下错误:

未删除执行记录报错信息

脚本被修改报错

flyway会对最后一次执行的脚本做改动校验,发生不一致会提示如下信息:

一致性校验错误

这种情况下首先要判断:

  1. 变动是否需要执行?
  2. 之前执行是否需要回滚?

如果需要回滚操作,需手动处理。
如果变动需要执行,需要先删除记录表中的对应记录后,启动项目即可。
如果两者均不需要,使用提示校验值替换执行表中值即可。

替换校验值
上一篇下一篇

猜你喜欢

热点阅读