Flyway 作用是基于 SQL 脚本的版本控制。将数据库的每次更改都编写为 SQL 脚本,并按版本号命名。Flyway 在应用启动时检查数据库中已应用的迁移版本,并按顺序执行所有新的迁移脚本。

引入下面的 maven 坐标

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

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>

application.yml 中配置下面的内容

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test_flyway
    username: root
    password: 数据库密码
  flyway:
    # 指定数据库迁移脚本的位置,classpath表示在资源目录下
    locations: classpath:db/migration
    # 启用Flyway功能
    enabled: true
    # 指定迁移脚本的编码格式为UTF-8
    encoding: UTF-8
    # 在迁移时验证已应用的迁移脚本是否被修改过
    validate-on-migrate: true
    # 当数据库是全新空库时,自动创建基线版本
    baseline-on-migrate: true

准备脚本,在 src/main/resources 下创建 db/migration 目录

2025-07-05T07:45:33.png

db/migration 目录下创建 V20250509__01_create_test-user.sql sql 文件 ,注意 V20250509__01 这个中间是两个下划线

CREATE TABLE `test_user`
(
    `id`              bigint                                                        NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    `username`        varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci  NOT NULL COMMENT '用户账号',
    `password`        varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',
    `nickname`        varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci  NOT NULL COMMENT '用户昵称',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
  AUTO_INCREMENT = 146
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci COMMENT ='用户信息表';

执行后的结果

2025-05-09T11:46:07.609+08:00  INFO 37464 --- [           main] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.020s)
2025-05-09T11:46:07.649+08:00  INFO 37464 --- [           main] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table `test_flyway`.`flyway_schema_history` ...
2025-05-09T11:46:07.814+08:00  INFO 37464 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema `test_flyway`: << Empty Schema >>
2025-05-09T11:46:07.855+08:00  INFO 37464 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema `test_flyway` to version "20250509 - 01 create test-user"
2025-05-09T11:46:07.974+08:00  INFO 37464 --- [           main] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema `test_flyway`, now at version v20250509 (execution time 00:00.193s)
...

2025-07-05T07:45:46.png

2025-07-05T07:45:52.png

标签: java, springboot, flyway

添加新评论