Flyway

在 Spring Boot 中恢复 Flyway 失败的迁移

1、概览 Flyway 迁移并不总是一帆风顺行,本文将带你了解迁移失败后的恢复方案。 2、设置 从基本的 Spring Boot 配置 Flyway 开始。它依赖 flyway-core、spring-boot-starter-jdbc 和 flyway-maven-plugin。 对于如何在 Spring Boot 中使用 Flyway 进行数据库迁移,你可以参阅 这篇文章。 2.1、配置 首先,添加两个不同的 Profile(配置文件)。这能够轻松地针对不同的数据库引擎运行迁移: <profile> <id>h2</id> <activation> <activeByDefault>true</activeByDefault> </activation> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> </dependencies> </profile> <profile> <id>postgre</id> <dependencies> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> </dependencies> </profile> 还要为每个 Profile 添加 Flyway 数据库配置文件。 首先,创建 application-h2.properties: flyway.url=jdbc:h2:file:./testdb;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;MODE=MySQL;DATABASE_TO_UPPER=false; flyway.user=testuser flyway.password=password 然后,创建 PostgreSQL application-postgre.properties: flyway.url=jdbc:postgresql://127.0.0.1:5431/testdb flyway.user=testuser flyway.password=password 注:你可以调整 PostgreSQL 配置,使其与你的数据库相匹配,也可以使用 代码示例中的 docker-compose 文件。 2.2、迁移 添加第一个迁移(migration)文件 V1_0__add_table.sql: create table table_one ( id numeric primary key ); 添加第二个包含错误的迁移文件 V1_1__add_table.

在 Spring Boot 中使用 Flyway 进行数据库迁移

在之前的 Spring Boot JdbcTemplate 教程 中,我们见识了如何使用 schema.sql 和 data.sql 脚本初始化数据库。这对于演示项目可能有用,但对于实际应用,我们应该使用数据库迁移工具。 Flyway 是最流行的基于 Java 的数据库迁移工具。可以将 Flyway 作为独立库,或使用 flyway-maven-plugin 或使用 Flyway Gradle 插件进行数据库迁移。 Spring Boot 提供了开箱即用的支持,用于 Flyway 数据库迁移。让我们看看如何创建一个使用 Spring Data JPA 与 PostgreSQL 数据库交互,并使用 Flyway 实现数据库迁移的 Spring Boot 应用。 首先,访问 https://start.springboot.io/,选择 Spring Web、Spring Data JPA、PostgreSQL Driver、Flyway Migration 和 Testcontainers starter,创建 Spring Boot 应用程序。 创建 Flyway 迁移脚本 Flyway 遵循 V<VERSION>__<DESCRIPTION>.sql 命名约定来命名其版本化的迁移脚本。让我们在 src/main/resources/db/migration 文件夹下添加以下两个迁移脚本。 V1__create_tables.sql: create table bookmarks ( id bigserial not null, title varchar not null, url varchar not null, created_at timestamp, primary key (id) ); V2__create_bookmarks_indexes.