概要
在 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: true locations: classpath:db/migration baseline-on-migrate: true placeholder-replacement: false datasource: driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://localhost:3306/my_info?useunicode=true&characterencoding=utf8&autoreconnect=true&allowmultiqueries=true&usessl=false username: root password: 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 会检测到校验和不匹配,从而抛出此错误。
以上就是springboot中使用flyway进行数据库迁移的详细流程的详细内容,更多关于springboot flyway数据迁移的资料请关注代码网其它相关文章!
发表评论