Flyway 简介:它是什么以及为什么需要它
\n\nFlyway 是一个用于数据库版本控制和迁移的库(Database Migration Tool)。在现代软件开发中,尤其是在团队协作和使用 CI/CD 方法论时,同步开发人员、测试环境和生产环境之间的数据库结构变得至关重要。Flyway 通过允许将数据库模式变更(创建表、添加列、索引、触发器等等)描述为一系列有版本号的 SQL 脚本或 Java 类来解决这个问题。
\n\nFlyway 的核心概念很简单:每个迁移都有一个唯一的版本号(例如,V1、V2、V3),并且只执行一次。该库使用一个特殊的表(默认为 flyway_schema_history)来跟踪哪些迁移已经应用于特定的数据库。这保证了数据库状态的幂等性和可重现性。
为什么要使用 Flyway?
\n- \n
- 模式版本控制: 每个数据库更改都是一个单独的版本,可以回滚或应用。 \n
- 自动化: 与 Maven、Gradle、Spring Boot 和 CI/CD 流水线集成。 \n
- 完整性控制: Flyway 检查迁移的校验和,防止对已执行脚本的意外修改。 \n
- 简单性: 对于大多数任务,只需编写一个普通的 SQL 脚本即可。 \n
为 Java 安装 Flyway
\n\nFlyway 不能通过 pip 或 npm 安装,因为它是一个 Java 库。有几种方法可以将其添加到项目中:
\n\n1. Maven (pom.xml)
\n<dependency>\n <groupId>org.flywaydb</groupId>\n <artifactId>flyway-core</artifactId>\n <version>9.22.3</version> <!-- 编写时的最新版本 -->\n</dependency>\n\n<!-- 您的数据库驱动程序,例如 PostgreSQL -->\n<dependency>\n <groupId>org.postgresql</groupId>\n <artifactId>postgresql</artifactId>\n <version>42.7.1</version>\n</dependency>\n\n2. Gradle (build.gradle)
\nimplementation 'org.flywaydb:flyway-core:9.22.3'\nimplementation 'org.postgresql:postgresql:42.7.1'\n\n3. Maven 插件(用于命令行运行)
\n<plugin>\n <groupId>org.flywaydb</groupId>\n <artifactId>flyway-maven-plugin</artifactId>\n <version>9.22.3</version>\n <configuration>\n <url>jdbc:postgresql://localhost:5432/mydb</url>\n <user>myuser</user>\n <password>mypassword</password>\n </configuration>\n</plugin>\n\n4. Spring Boot(自动配置)
\n如果您使用 Spring Boot,只需添加依赖项并在 application.properties 中配置参数:
spring.flyway.enabled=true\nspring.flyway.locations=classpath:db/migration\nspring.datasource.url=jdbc:postgresql://localhost:5432/mydb\nspring.datasource.username=myuser\nspring.datasource.password=mypassword\n\n快速入门及代码示例
\n\n让我们看一个在 Java 应用程序中使用 Flyway 创建 users 表的最小示例。
步骤 1:创建迁移目录结构
\n默认情况下,Flyway 在 classpath 的 db/migration 文件夹中查找 SQL 脚本(例如,src/main/resources/db/migration)。
步骤 2:创建迁移文件
\n在此文件夹中创建一个名为 V1__Create_users_table.sql 的文件:
CREATE TABLE users (\n id SERIAL PRIMARY KEY,\n username VARCHAR(50) NOT NULL UNIQUE,\n email VARCHAR(10