内容提要
Flyway是一款开源的数据库内容变更控制工具,支持多种关系型数据库。它遵循Spring Boot的约定大于配置,可以通过原生SQL或Java API实现数据库内容版本变动。Flyway的配置需要自定义,可以通过依赖注入来实现CRUD操作。Flyway会在数据库连接配置后同步地执行所有迁移操作。
延伸解读
为何需要自定义 Flyway 配置
Flyway 默认的 Java 迁移类由 Flyway 自身实例化,不受 Spring 容器管理,因此无法使用 @Autowired 等依赖注入。若迁移逻辑需要调用现有 DAO 或 Service 来操作业务数据,只能退化为原生 JDBC 或静态方法,代码难以维护。文章通过手动配置 Flyway,将迁移类注册为 Spring Bean,从而在迁移中直接注入 MyMapper 等组件,实现优雅的 CRUD。
手动配置的关键步骤与注意事项
自定义配置需创建 FlywayConfig 类,注入 DataSource 和 ApplicationContext,通过 applicationContext.getBeansOfType(JavaMigration.class) 获取所有迁移 Bean,再调用 Flyway.configure() 设置数据源、迁移脚本位置、历史表名等参数,并传入 javaMigrations。同时必须在 Spring Boot 启动类上排除 FlywayAutoConfiguration,避免自动配置与手动配置冲突。
迁移执行时机与线上安全
文章指出,Flyway 会在数据库连接配置完成后、HTTP 服务暴露(Servlet 容器监听端口)之前同步执行所有迁移。这意味着迁移操作在应用对外提供服务前完成,不会因迁移延迟影响线上请求。但需注意,若迁移耗时较长,会延长应用启动时间,需评估对部署流程的影响。
Q&A
Flyway是什么?
Flyway是一款开源的数据库内容变更控制工具,支持多种关系型数据库。
Flyway支持哪些数据库?
Flyway支持MySQL、SQL Server、Oracle、PostgreSQL、SQLite、TiDB、MariaDB等主流关系型数据库,MongoDB支持尚在预览阶段。
如何在Flyway中实现依赖注入?
在Flyway中,可以通过自定义配置和继承BaseJavaMigration类来实现依赖注入,方便进行CRUD操作。
Flyway的迁移文件需要放在哪里?
Flyway的迁移文件需要存放在src/main/resources/db/migration文件夹下。
使用Flyway进行数据库迁移的步骤是什么?
使用Flyway进行数据库迁移的步骤包括配置数据源、定义迁移文件、执行迁移操作等。
Flyway与Liquibase有什么区别?
Flyway相较于Liquibase更简单,Liquibase的使用涉及更多额外概念,学习成本较高。