未分类 · 2025-02-10 0

flyway 使用

1.pom

flyway 依赖

<dependencies>
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>9.20.0</version>
    </dependency>

    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-mysql</artifactId>
        <version>9.20.0</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.31</version>
        <scope>runntime</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
        <scope>test</scope>
    </dependency>
</dependencies>

2.脚本

V1__Create_student1_table.sql

create table `temp`.`student1` (
    `id` int not null,
    `name` varchar(100) not null
);

V3.1__Add_student1_31_table.sql

INSERT INTO `temp`.`student1` VALUES(3, '31');

V3.2__Add_student1_32_table.sql

INSERT INTO `temp`.`student1` VALUES(3, '32');

V5__Add_student1_5_table.sql

INSERT INTO `temp`.`student1` VALUES(5, '5');

2.测试类

@Test
public void test1() {
    String url = "jdbc:mysql://127.0.0.1:3306/temp";
    String user = "root";
    String password = "123456";

    Flyway flyway = Flyway.configure()
            // 1.
            .dataSource(url, user, password)
            // 2.默认是 classpath:db/migration
            // .locations("classpath:db/migration")
            // 3.默认是 url 配置的 schema
            .schemas("flyway")
            // 3.默认是 flyway_schema_history
            // .table("flyway_schema_history")
            // 4.默认值是 false, 设置为 true 后 flyway 将在需要 baseline 的时候, 自动执行一次 baseline。
            //   如果没有 flyway_schema_history 这个 metadata 表,
            //   在执行 flyway migrate 命令之前, 必须先执行 flyway baseline 命令
            .baselineOnMigrate(true)
            // 5.指定 baseline 的版本号,默认值为 1, 低于该版本号的 SQL 文件, migrate 时会被忽略
            .baselineVersion("0")
            // 6.默认是 true,则执行 flyway.clean() 不会删除当前 schema 下所有表
            // .cleanDisabled(true)
            .load();

    // 创建 flyway_schema_history 表
    // 默认会记录到表中,版本是 1,故上方需要设置 baselineVersion 为 0,否则版本1的脚本不会执行
    // flyway.baseline();

    // 删除 flyway_schema_history 表中失败的记录
    // flyway.repair();

    // 检查 sql 文件
    // flyway.validate();

    // 执行数据迁移
    flyway.migrate();

    // 删除当前 schema 下所有表
    // flyway.clean();
}