Flyway 学习使用总结

Posted xiaobaidonghui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flyway 学习使用总结相关的知识,希望对你有一定的参考价值。

Flyway 学习使用总结

前言
之前从未认为数据库管理是这么的重要,直到去年参与核算检测的项目,迭代周期极其之短,加之开发、测试、预发、生产多套环境并存,之前通过markdown记录的数据库变动心力交瘁,才真正着手了解flyway,现将核心且常见的基础理论部分记录于此。
以上
共勉
baidonghui 2021/05
自研软件推广位,欢迎扫码体验

Flyway 可以通过 sql 语句对数据库进行版本控制,在CI/CD中也能很好的解决数据库升版和迁移问题。

一、工作流程

Flyway 的工作主要依赖于一张历史记录表及一组记录数据库变动的sql脚本文件。

首先 Flyway 会在数据库中维护一张历史记录表(若为空库默认自动创建,默认表名为 flyway_schema_history),用于跟踪记录数据库的版本。其中包括版本号、脚本名称、脚本校验值、执行顺序号、执行时间、是否成功等。

随后 Flyway 会扫描指定路径下记录数据库变更的 sql 文件,与数据库中记录的版本进行比对。

低于数据库当前版本的脚本会被忽略,高于数据库当前版本的脚本,会依次按照版本号升序执行,对数据库进行打版升级。

二、使用 Flyway

1. 引入

在 Spring Boot 中,引入方式非常简单。

  • 可以在新建 Spring Boot 项目时,勾选 Flyway Migration。此时会自动引入 Flyway 依赖,并创建存放sql文件的目录 /resources/db/migration

  • 现有的 Spring Boot 项目,则需手动增加Flyway依赖,并创建存放sql文件的目录,默认目录仍为/resources/db/migration

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

2. 创建 Sql 脚本文件

Flyway支持的脚本文件分为两类,版本变更脚本文件和可重复执行文件,两种文件都应按照规则进行命名,并放入对应的sql文件目录里。

版本变更文件命名方式为V版本号__描述.sql,例如:

版本号1的脚本文件:V1__Initial_Setup.sql
版本号2的脚本文件:V2__First_Changes.sql
版本号2.1的脚本文件:V2_1__Refactoring

可重复执行文件命名方式为R__描述.sql,例如:R__add_unknown_user.sql

注意:Flyway会对脚本文件进行校验。以V开头的版本变动文件,不应该进行修改。R开头的脚本文件,若发生变动后,将会再次执行。

3. 启动项目

运行 Spring Boot 项目,可在启动日志里找到类似如下的数据库版本日志。

2021-05-06 14:51:56.465  INFO 6236 --- [           main] o.f.c.i.database.base.DatabaseType       : Database: jdbc:mysql://localhost:3306/transcar (MySQL 5.7)
2021-05-06 14:51:56.511  INFO 6236 --- [           main] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.025s)
2021-05-06 14:51:56.530  INFO 6236 --- [           main] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table `transcar`.`flyway_schema_history` with baseline ...
2021-05-06 14:51:56.624  INFO 6236 --- [           main] o.f.core.internal.command.DbBaseline     : Successfully baselined schema with version: 20210506143332
2021-05-06 14:51:56.645  INFO 6236 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema `transcar`: 20210506143332
2021-05-06 14:51:56.646  INFO 6236 --- [           main] o.f.core.internal.command.DbMigrate      : Schema `transcar` is up to date. No migration necessary.

三、常见配置项

spring.flyway.enabled:默认true为开启状态。

spring.flyway.baseline-description:设置在进行基线版本打版时的描述信息。

spring.flyway.baseline-on-migrate:设置在非空库中,是否进行基线打版,默认值为false。因此按照上面的工作流程,若数据库为非空库,则不会自动创建数据库版本记录表。

spring.flyway.baseline-version:默认值为1,指定基线版本的版本号。对应SQL变更文件名V后的版本号。

spring.flyway.locations:默认值[classpath:db/migration],指定sql文件的目录。

完整配置项参见Spring官方文档

以上是关于Flyway 学习使用总结的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 学习使用总结

Flyway 学习使用总结

Java基础学习总结(183)—— Flyway 在项目中迁移数据实践

Java基础学习总结(183)—— Flyway 在项目中迁移数据实践

Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较

Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较