Flyway 使用手记

Flyway简介

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

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

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

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

  • 开发人员将应用程序打包
  • 应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本

Flyway使用

引入jar包

  1. dependency

    
        org.flywaydb
        flyway-core
        5.0.3
    

  1. build


    
        
            org.flywaydb
            flyway-maven-plugin
            5.0.3
        
    

配置信息

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

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 使用手记)