# 一、简介   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 org.flywaydb flyway-core ``` ## 3.2 配置数据源 ```yml spring: flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true # 如果数据库非空,且无 flyway_schema_history 表,则先创建基线版本 ```   `baseline-on-migrate: true`,当数据库已经存在数据,但是没有flyway_schema_history表时,Flyway会插入一条基线数据,并标记为1.0版本,则后续的迁移脚本只会执行比1.0版本更高的数据库文件。   **如果设置为false,如果数据库已经存在数据时,Flyway会报错。**   因此需要避免这种情况的存在,在**初始发布应用时,要保证数据库为空**。 ## 3.3 创建数据库脚本   在项目的资源目录 src/main/resources下创建文件夹 db/migration。   Flyway 的 SQL 脚本文件名有严格的命名规则:`V__.sql`   例如V1.0.0_001__20251027.sql,表示v1.0.0版本的第一个sql,日期为2025年10月27日。   **创建了迁移脚本,一旦应用,就不可修改,否则会导致校验错误。如果确实要修改,请再创建一个脚本。** ## 3.4 启动程序   启动程序后。Flyway会自动在数据库中创建flyway_schema_history表,然后扫描db/migration目录下的所有脚本,按顺序执行sql文件,并记录到flyway_schema_history表中。