文章目录
- 概要
- Spring Boot 集成 Flyway
- Flyway 其他用法
- bug错误
- Flyway版本不兼容
- 数据库存在表了
- Flyway 的校验和(Checksum)不匹配
概要
在 Spring Boot 项目开发中,数据库的变更不可避免。手动执行 SQL 脚本不仅容易出错,也难以维护数据库版本的一致性。Flyway
作为一款轻量级的数据库迁移工具
,能够帮助我们优雅地解决这些问题。
Spring Boot 集成 Flyway
1、添加 Flyway 依赖
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>6.1.0</version></dependency>
2、配置 Flyway
spring:flyway:enabled: truelocations: classpath:db/migrationbaseline-on-migrate: trueplaceholder-replacement: falsedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/my_info?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=falseusername: rootpassword: iuowiebd
3、创建数据库迁移脚本
Flyway 使用 SQL 脚本来定义数据库的变更。脚本需要放在 src/main/resources/db/migration 目录下(默认路径),并且遵循特定的命名规则:V<版本号>__<描述>.sql
例如:V1__create_user_table.sql
CREATE TABLE user
(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) NOT NULL,email VARCHAR(255) NOT NULL
);insert into user (name, email)
values ('user1', 'user1@qq.com');
4、启动应用
启动 Spring Boot 应用,Flyway 会自动执行 db/migration 目录下的迁移脚本,并将执行记录存储在 flyway_schema_history 表中。
控制台关于 flyway 的日志信息:
成功创建表:
Flyway 其他用法
1、 禁用 Flyway 自动迁移
在某些场景下,可能需要手动控制 Flyway 的迁移,可以禁用自动迁移:
spring:flyway:enabled: false
bug错误
Flyway版本不兼容
如果使用的 Flyway 版本与 Spring Boot 版本不兼容,可能会导致 Flyway 无法正常工作。
控制台不打印任何关于 flyway 的日志。
数据库存在表了
数据库存在表了,就不会执行 sql 了。
Flyway 只会执行比当前数据库版本号更高的迁移脚本。如果数据库的当前版本是 1,而你的迁移脚本的版本号也是 1 或者更低,Flyway 会认为这些脚本已经执行过,因此不会再次执行。
所以只需把 sql 脚本的版本改一下,V2__create_user_table.sql
(升高版本)
Flyway 的校验和(Checksum)不匹配
我先启动项目,数据库迁移成功,然后我改动了sql文件,就报错:
如果本地迁移脚本的内容发生了更改(例如,修改了 SQL 脚本),Flyway 会检测到校验和不匹配,从而抛出此错误。