项目通过集成Flyway实现数据库版本控制
Flyway 简介
Flyway 是一个基于命令行的数据库版本控制工具,它允许开发者使用简单的脚本文件来管理数据库的升级和迁移。Flyway 支持多种关系型数据库,通过 Flyway,开发者可以轻松地跟踪和管理数据库模式的变化,以保持代码和数据库结构的一致性,并确保数据库的可迁移性。
一、添加依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flay-core</artifactId>
<version>${flyway.version}</version>
</dependency>
根据项目使用数据库版本来确定${flyway.version},参考如下版本对应关系:
版本支持
– PostgreSQL
Flyway 5.x.x – 支持 PostgreSQL 8.0 及以上版本。
Flyway 6.x.x – 支持 PostgreSQL 9.4 及以上版本。
Flyway 7.x.x – 支持 PostgreSQL 9.5 及以上版本。
Flyway 8.x.x(最新版本) – 支持 PostgreSQL 9.6 及以上版本。
– Mysql
Flyway 6.x.x – 支持 MySQL 5.5 及以上版本。
Flyway 7.x.x – 支持 MySQL 5.6 及以上版本。
Flyway 8.x.x – 支持 MySQL 5.7 及以上版本。
Flyway 8.2.x – 支持 MySQL 8.0 及以上版本。
如遇到依赖无法下载问题可参考:https://blog.csdn.net/weixin_43762870/article/details/139114279
二、配置说明
spring:
# flyway配置
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径,官方默认db/migration
locations: classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-separator: __
# 避免带${}sql执行失败
placeholder-prefix: '#('
placeholder-suffix: )
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验,默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
# 是否关闭要清除已有库下的表功能,生产环境必须为true,否则会删库
clean-disabled: true
三、脚本命名
- 被执行一次的SQL命名以大写的"V"开头,后面跟上"0~9"数字的组合,数字之间可以用“.”或者下划线"_"分割开,然后再以两个下划线分割,其后跟文件名称,最后以.sql结尾。其中,“V”后面的数字表示版本号,用于控制脚本文件的执行顺序。
V1__create_table.sql
- 可重复运行的SQL,则以大写的“R”开头,后面再以两个下划线分割,其后跟文件名称。
R__update_sys.sql
执行成功:
默认会生成flyway_schema_history
表,运行结果会记录在此表中