Flyway 是一个开源的数据库迁移工具,它帮助开发者在开发过程中管理数据库的变更。通过 Flyway,你可以将数据库的变更以脚本的形式存储,并确保这些变更能够被正确地应用到不同的环境中(如开发环境、测试环境和生产环境)。Flyway 支持多种数据库,包括 MySQL、PostgreSQL、Oracle、SQL Server 等。
Flyway 使用 SQL 脚本来定义数据库的变更。每个脚本都有一个唯一的版本号,Flyway 会根据版本号顺序依次执行这些脚本。Flyway 还会在数据库中创建一个特殊的表(默认为 schema_version
),用于记录已经执行过的脚本,从而避免重复执行。
如果你使用的是 Maven 项目,可以在 pom.xml
中添加以下依赖:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>8.5.13</version> <!-- 请根据需要选择最新版本 -->
</dependency>
如果你使用的是 Gradle 项目,可以在 build.gradle
中添加:
implementation 'org.flywaydb:flyway-core:8.5.13'
Flyway 的配置可以通过代码或者配置文件完成。以下是一个简单的 Java 配置示例:
import org.flywaydb.core.Flyway;
public class FlywayMigration {
public static void main(String[] args) {
// 创建 Flyway 实例
Flyway flyway = Flyway.configure()
.dataSource("jdbc:mysql://localhost:3306/mydb", "root", "password") // 数据库连接信息
.locations("classpath:db/migration") // 脚本存放路径
.baselineOnMigrate(true) // 自动设置基准版本
.load();
// 执行迁移
flyway.migrate();
}
}
Flyway 的迁移脚本通常存放在 src/main/resources/db/migration
目录下。脚本命名格式为 V<版本号>__<描述>.sql
,例如:
V1__Create_users_table.sql
V2__Add_email_column_to_users.sql
以下是一个简单的 SQL 脚本示例(V1__Create_users_table.sql
):
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
运行上述 Java 程序后,Flyway 会自动检测并执行 db/migration
目录下的所有脚本。如果脚本已经被执行过,Flyway 不会再次执行它们。
db/migration
目录下创建回滚脚本,命名格式为 R__<描述>.sql
。application.properties
或 flyway.conf
)来支持不同环境的数据库连接。Flyway 是一个强大的数据库版本控制工具,可以帮助开发者轻松管理数据库的变更。通过简单的配置和脚本编写,Flyway 能够自动化地处理数据库迁移任务,减少手动操作带来的错误。