flyway提供的功能:数据库版本管理
Flyway是⼀款开源的数据库版本管理⼯具,它更倾向于规约优于配置的⽅式。 Flyway可以独⽴于应⽤实现管理并跟踪数据库变更,⽀持数据库版本⾃动升级,并且有⼀套默认的规约,不需要复杂的配置,Migrations 可以写成SQL脚本,也可以写在Java代码中,不仅⽀持Command Line和Java API,还⽀持Build构建⼯具和Spring Boot等,同时在分布 式环境下能够安全可靠地升级数据库,同时也⽀持失败恢复等。 通俗的讲,Flyway可以像Git管理不同的⼈的代码那样,管理不同⼈的sql脚本,坐到数据库同步的功能。
脚本命名规范
在创建Flyway的SQL脚本时,有些命名规范需要遵守,这些命名规范决定了Flyway执行脚本的顺序和方式,可以先参考下面的示意图。
示例
V1.0.0__init_table.sql
为了能被Flyway正确执行,SQL迁移脚本需要遵循如下规范:
- <V> Prefix(前缀):
V
表示有版本号的数据库迁移,U
表示一些数据库版本的回滚,R
表示可重复执行的数据库迁移; - <1.0.0> Version(版本号):Flyway会按照版本号的大小顺序来执行数据库迁移脚本;
- <__> Separator(分隔符):命名时使用双下划线分隔符;
- <init_table> Description(描述):用于描述该迁移脚本的具体操作说明;
- <.sql> Suffix(后缀):表示
.sql
文件。
SpringBoot集成
- 首先在pom.xml中添加Flyway相关依赖,注意无需添加Flyway的版本号:
<!--Flyway相关依赖-->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
- 修改配置文件
application.yml
,对数据源和Flyway进行配置;
spring:
flyway:
# 启用Flyway功能
enabled: true
# 禁用Flyway的clean命令,使用clean命令会删除schema下的所有表
clean-disabled: true
# 设置Flyway的SQL脚本路径
locations: classpath:db/migration
# 设置版本信息控制表名称,默认flyway_schema_history
table: flyway_schema_history
# 在执行migrate命令时需要有flyway_schema_history表,通过baseline命令可以生成该表
baseline-on-migrate: true
# 指定baseline版本号,低于该版本的SQL脚本在migrate是不会执行
baseline-version: 1
# 设置字符编码
encoding: UTF-8
# 不允许不按顺序迁移
out-of-order: false
# 设置Flyway管控的schema,不设置的话为datasourcel.url中指定的schema
schemas: flyway
# 执行migrate时开启校验
validate-on-migrate: true
注意事项
1、不支持降级,支持事务回滚,千万不要手动更改数据库表结构!!!更新前,做好备份!
2、在resources资源文件夹下的sql路径要与配置路径保持一致,如上面配置文件夹db/migration/sqlserver
3、不要使用@PostConstruct注解做数据查询处理,因为启动微服务时会先启动PostConstruct里的方法,后启动flyway,可能造成方法无法读取还没有创建的数据库表; 如果要使用,则使用注解@DependsOn(“flywayInitializer”)
4、V8.2.5_20220721_1000__init.sql第三个是两个下划线,请注意!
5、使用R可以重新执行已经修改过的sql文件,如:R__V8.2.5_20220721_1000__init.sql