一、Maven依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
注意jdbc依赖:引入spring-jdbc为了启用数据源的自动配置
二、定义脚本
1. 脚本路径
- 默认路径为:src/main/resources/db/migration
- 自定义脚本位置,可以多个,可以给不同环境配置不同位置
spring.flyway.locations=classpath:db/migration,classpath:test/db/migration
- 对应脚本路径不存在时,则不会生成Flyway对象,不会执行数据库脚本,例如:使用默认路径时,若`src/main/resources/db/migration`文件夹不存在,则不会生成Flyway对象,自动注入为null
@Autowired private Flyway flyway;
2. 脚本格式
- V
- V+版本号(从1开始)+双下划线+描述+结束符:V1.0.0.2023__init.sql
- 前缀为V的脚本不可重复执行,只会执行一次,已经执行过的历史版本脚本不能再修改,除非清除flayway的历史记录,重新执行升级脚本
- R
- R+双下划线+描述+结束符:R__app_init.sql
- 前缀为R的脚本,后面无版本号,可以重复执行,每次内容发生变化时重启后就会执行
三、迁移时数据库非空
- 启动失败,报错:Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) `app` without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
- 解决方案:添加以下配置
## 当迁移时,数据库非空且没有元数据表时,自动执行baseline spring.flyway.baseline-on-migrate=true