Flyway 学习使用总结

Flyway是一款用于数据库版本管理的工具,通过SQL脚本实现版本控制。它会在数据库中创建历史记录表,根据指定目录下的脚本文件与当前数据库版本对比,执行必要的升级操作。文章介绍了Flyway的工作流程、使用方法,包括SpringBoot中的集成、脚本文件命名规则,以及常见配置项。同时,展示了启动项目的日志输出,帮助理解其运行过程。
摘要由CSDN通过智能技术生成

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官方文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值