美文网首页
Flyway 使用手记

Flyway 使用手记

作者: Kindey_S | 来源:发表于2021-03-31 18:19 被阅读0次

    Flyway简介

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

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

    • 开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本
    • DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级
    • 应部署人员拿到应用部署包,备份、替换,以完成应用程序升级

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

    • 开发人员将应用程序打包
    • 应部署人员拿到应用部署包,备份、替换,以完成应用程序升(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. 之前执行是否需要回滚?

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

    替换校验值

    相关文章

      网友评论

          本文标题:Flyway 使用手记

          本文链接:https://www.haomeiwen.com/subject/afjahltx.html