SpringBoot使用Flyway来实现表结构的同步
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
目录
在 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)
...