Files
blog-press/docs/Web-Backend/Others/Flyway.md
2025-12-16 18:07:42 +08:00

63 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Flyway简单使用
date: 2025-11-27
---
# 一、简介
  Flyway 是一个开源的数据库版本控制工具,它极大地简化了数据库的迁移和版本管理。它的核心思想是​​像**用 Git 管理代码一样来管理数据库的结构**​​。
# 二、原理
  Flyway 通过在数据库中创建一个名为 flyway_schema_history的特殊表来工作
| 列名 | 含义 |
| - | - |
| installed_rank | 执行顺序 |
| version | 脚本的版本号 |
| description | 脚本的描述 |
| type | 脚本类型(通常是 SQL |
| script | 脚本文件名 |
| checksum | 脚本文件的校验和(用于检测篡改) |
| installed_by | 执行人 |
| installed_on | 执行时间 |
| execution_time | 执行耗时(毫秒) |
| success | 是否成功 |
  工作流程:
1. 应用启动时Flyway 会检查配置的数据库路径。
2. 检查目标数据库中的 flyway_schema_history表。
3. 将数据库路径下的迁移脚本与 flyway_schema_history表中的记录进行对比。
4. 按照版本号​​顺序​​执行那些尚未执行的迁移脚本。
5. 执行成功后,将记录插入 flyway_schema_history表。
## 2.1 校验和计算
  Flyway 使用 CRC32 算法​​ 计算 SQL 脚本文件的校验和Checksum。Javs使用32位有符号整数存储因此有时会得到负数。可以通过`mvn flyway:info`查看每个脚本的校验和。
# 三、与SpringBoot集成
## 3.1 添加依赖
```xml
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
```
## 3.2 配置数据源
```yml
spring:
flyway:
enabled: true
locations: classpath:db/migration
baseline-on-migrate: true # 如果数据库非空,且无 flyway_schema_history 表,则先创建基线版本
```
&emsp;&emsp;`baseline-on-migrate: true`当数据库已经存在数据但是没有flyway_schema_history表时Flyway会插入一条基线数据并标记为1.0版本则后续的迁移脚本只会执行比1.0版本更高的数据库文件。
&emsp;&emsp;**如果设置为false如果数据库已经存在数据时Flyway会报错。**
&emsp;&emsp;因此需要避免这种情况的存在,在**初始发布应用时,要保证数据库为空**。
## 3.3 创建数据库脚本
&emsp;&emsp;在项目的资源目录 src/main/resources下创建文件夹 db/migration。
&emsp;&emsp;Flyway 的 SQL 脚本文件名有严格的命名规则:`V<Version>__<Description>.sql`
&emsp;&emsp;例如V1.0.0_001__20251027.sql表示v1.0.0版本的第一个sql日期为2025年10月27日。
&emsp;&emsp;**创建了迁移脚本,一旦应用,就不可修改,否则会导致校验错误。如果确实要修改,请再创建一个脚本。**
## 3.4 启动程序
&emsp;&emsp;启动程序后。Flyway会自动在数据库中创建flyway_schema_history表然后扫描db/migration目录下的所有脚本按顺序执行sql文件并记录到flyway_schema_history表中。