3. Flyway 安装与配置:命令行工具、Maven/Gradle 插件、Spring Boot 集成配置
Flyway 的安装与配置是数据库迁移工作的起点。根据团队技术栈和部署环境的不同,Flyway 提供了三种主流集成方式:命令行工具(适合 CI/CD 与运维)、构建工具插件(Maven/Gradle,适合开发与构建阶段)以及 Spring Boot 自动配置(适合微服务与 Java 应用)。本章将逐一讲解每种方式的安装步骤、核心配置项及最佳实践。
3.1 命令行工具安装与配置
Flyway 命令行工具是一个独立的可执行程序,不依赖 Java 开发环境(仅需 JRE),非常适合在 Docker 容器、Jenkins Pipeline 或 Shell 脚本中执行迁移。
3.1.1 下载与安装
- 下载地址:https://flywaydb.org/download(社区版免费)
- 安装步骤:
- 下载对应操作系统(Windows/Linux/macOS)的压缩包。
- 解压至目标目录,例如
/opt/flyway或C:\flyway。 - 将
<flyway-home>/bin添加到系统PATH环境变量。 - 验证安装:执行
flyway -v,应输出版本号。
3.1.2 核心配置文件:flyway.conf
命令行工具通过 conf/flyway.conf 文件配置数据库连接与行为。以下是一个典型配置示例:
# flyway.conf
flyway.url=jdbc:postgresql://localhost:5432/mydb
flyway.user=db_user
flyway.password=db_pass
flyway.locations=filesystem:./sql/migrations
flyway.baselineOnMigrate=true
flyway.encoding=UTF-8
flyway.cleanDisabled=true
| 配置项 | 说明 | 必填 |
|---|---|---|
flyway.url |
数据库 JDBC 连接 URL | 是 |
flyway.user |
数据库用户名 | 是 |
flyway.password |
数据库密码 | 是 |
flyway.locations |
迁移脚本存放路径(支持 filesystem: 或 classpath:) |
否(默认 filesystem:./sql) |
flyway.baselineOnMigrate |
对非空数据库是否自动基线化 | 否(默认 false) |
flyway.cleanDisabled |
禁止执行 flyway clean(生产环境建议 true) |
否(默认 false) |
安全提示:生产环境切勿将密码明文写入配置文件。推荐使用环境变量
FLYWAY_PASSWORD 或集成密钥管理服务(如 Vault)。
3.1.3 常用命令速查
flyway migrate— 执行待处理的迁移脚本。flyway info— 查看迁移状态与版本历史。flyway baseline— 对已有数据库建立基线版本。flyway validate— 校验已应用脚本是否被篡改。flyway repair— 修复迁移记录表(如删除失败的迁移条目)。
3.2 Maven 插件集成
对于基于 Maven 构建的 Java 项目,Flyway Maven 插件可以将数据库迁移无缝集成到构建生命周期中,实现 mvn compile 时自动执行迁移。
3.2.1 插件配置
在 pom.xml 的 <build><plugins> 中添加:
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>9.22.3</version>
<configuration>
<url>jdbc:mysql://localhost:3306/mydb</url>
<user>${db.user}</user>
<password>${db.password}</password>
<locations>
<location>classpath:db/migration</location>
</locations>
<baselineOnMigrate>true</baselineOnMigrate>
</configuration>
</plugin>
3.2.2 常用 Maven 命令
| 命令 | 说明 |
|---|---|
mvn flyway:migrate |
执行迁移 |
mvn flyway:info |
查看迁移状态 |
mvn flyway:baseline |
建立基线 |
mvn flyway:clean |
清空数据库(慎用) |
mvn flyway:validate |
校验脚本完整性 |
最佳实践:将数据库连接信息通过 Maven Profile 或环境变量注入,避免硬编码。例如
-Ddb.user=dev_user -Ddb.password=dev_pass。
3.3 Gradle 插件集成
Gradle 插件的配置方式与 Maven 类似,但更简洁,适合 Kotlin/Groovy 构建脚本。
3.3.1 插件配置(build.gradle)
plugins {
id 'org.flywaydb.flyway' version '9.22.3'
}
flyway {
url = 'jdbc:postgresql://localhost:5432/mydb'
user = 'db_user'
password = 'db_pass'
locations = ['classpath:db/migration']
baselineOnMigrate = true
}
3.3.2 常用 Gradle 任务
gradle flywayMigrategradle flywayInfogradle flywayBaselinegradle flywayValidate
注意:Gradle 插件默认不会自动绑定到
build 生命周期。如需在编译时自动迁移,需显式配置任务依赖:compileJava.dependsOn flywayMigrate。
3.4 Spring Boot 自动配置集成
Spring Boot 对 Flyway 提供了开箱即用的自动配置,只需引入依赖并配置 application.yml 即可。
3.4.1 添加依赖
<!-- Maven -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<!-- 数据库驱动(以 PostgreSQL 为例) -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
3.4.2 配置文件(application.yml)
spring:
datasource:
url: jdbc:postgresql://localhost:5432/mydb
username: db_user
password: db_pass
flyway:
enabled: true
locations: classpath:db/migration
baseline-on-migrate: true
clean-disabled: true
encoding: UTF-8
3.4.3 关键配置项说明
| 配置项 | 默认值 | 说明 |
|---|---|---|
spring.flyway.enabled |
true | 是否启用 Flyway 自动迁移 |
spring.flyway.locations |
classpath:db/migration | 迁移脚本路径 |
spring.flyway.baseline-on-migrate |
false | 对已有数据库自动基线化 |
spring.flyway.clean-disabled |
false | 禁止 clean 操作(生产建议 true) |
spring.flyway.out-of-order |
false | 允许乱序迁移(多分支开发时使用) |
Spring Boot 优势:应用启动时自动执行迁移,无需额外命令。配合
@FlywayDataSource 可支持多数据源场景。
3.5 配置优先级与最佳实践
Flyway 支持多种配置来源,优先级从高到低为:命令行参数 > 环境变量 > 配置文件 > 默认值。合理利用这一机制可以避免敏感信息泄露。
3.5.1 环境变量覆盖示例
# Linux/macOS
export FLYWAY_URL="jdbc:postgresql://prod-db:5432/proddb"
export FLYWAY_USER="prod_user"
export FLYWAY_PASSWORD="prod_pass"
# Windows PowerShell
$env:FLYWAY_URL="jdbc:postgresql://prod-db:5432/proddb"
3.5.2 多环境配置策略
| 环境 | 推荐集成方式 | 配置来源 |
|---|---|---|
| 本地开发 | Maven/Gradle 插件 | pom.xml / build.gradle + 本地 profile |
| CI/CD 流水线 | 命令行工具 | 环境变量 + CI 密钥管理 |
| 生产环境 | Spring Boot 自动配置 | application-prod.yml + 外部配置中心 |
核心原则:
• 脚本路径统一使用
• 生产环境务必设置
• 使用
• 脚本路径统一使用
classpath:db/migration(Java 项目)或 filesystem:./sql/migrations(非 Java 项目)。• 生产环境务必设置
cleanDisabled=true,防止误操作清空数据库。• 使用
baselineOnMigrate=true 避免对已有数据库手动基线化。