Flyway 使用手记
2021-03-31 本文已影响0人
Kindey_S
Flyway简介
Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。Flyway支持SQL和Java两种类型的脚本,你可以将脚本打包到应用程序中,在应用程序启动时,由Flyway来管理这些脚本的执行,这些脚本被Flyway称之为migration。
常规项目部署应用的流程大概是这样的:
- 开发人员将应用程序打包、按顺序汇总并整理数据库升级脚本
- DBA拿到数据库升级脚本检查、备份、执行,以完成数据库升级
- 应部署人员拿到应用部署包,备份、替换,以完成应用程序升级
引入Flyway之后的应用部署流程大概是这样的:
- 开发人员将应用程序打包
- 应部署人员拿到应用部署包,备份、替换,以完成应用程序升(Flyway将自动执行升级/备份脚本
Flyway使用
引入jar包
- dependency
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.3</version>
</dependency>
</dependencies>
- 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会对最后一次执行的脚本做改动校验,发生不一致会提示如下信息:
一致性校验错误这种情况下首先要判断:
- 变动是否需要执行?
- 之前执行是否需要回滚?
如果需要回滚操作,需手动处理。
如果变动需要执行,需要先删除记录表中的对应记录后,启动项目即可。
如果两者均不需要,使用提示校验值替换执行表中值即可。