Flyway 是一款开源的数据库版本管理工具,能够有效管理数据库变更并实现自动升级。

它通过创建历史记录表来跟踪数据库状态,并在项目启动时自动扫描迁移文件,判断是否需要执行迁移操作。
Flyway 支持多种数据库,并通过校验版本号和锁机制确保迁移的准确性和一致性。在使用 Flyway 时,开发者需要注意脚本命名规则、执行顺序、错误处理以及版本兼容性等问题。
Flyway 的工作模式非常简单直观 :
元数据表:当 Flyway 首次连接到一个数据库时,它会自动创建一个名为 flyway_schema_history 的元数据表。这张表用来记录所有已经执行过的迁移脚本及其状态(如版本号、校验和、执行时间等)。扫描迁移脚本:Flyway 会扫描指定目录(默认为path:db/migration)下的迁移文件 。比对与执行:Flyway 将扫描到的脚本与元数据表中的记录进行比对。它会找出所有尚未执行且版本号更高的脚本,并按照版本号升序依次执行 。记录与校验:每个脚本成功执行后,Flyway 都会在元数据表中插入一条新的记录,记录下该次迁移。如果已执行的脚本内容被修改,其校验和会与元数据表中的记录不一致,在下一次迁移时 Flyway 会报错并终止,从而保证了历史迁移的不可变性和一致性 。Spring Boot 对 Flyway 提供了开箱即用的支持,只需引入依赖并进行简单配置,应用启动时便会自动执行数据库迁移 。
在 Spring Boot 项目中集成 Flyway 通常只需三步:
在 pom.xml 或 build.gradle 中添加 Flyway 依赖。在 application.properties 或 application.yml 中配置数据库连接和启用 Flyway(例如 spring.flyway.enabled=true)。在 src/main/resources/db/migration 目录下创建你的 SQL 迁移脚本 。