引入Maven的依赖

<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>

springboot自带flyway依赖版本号,这里不需要配置版本号



在Springboot中配置flyaway

resource文件夹下创建db/migration文件夹,里面放入自己写的.sql文件,格式如下:

V或者R开头(注意,必须是大写),然后版本号(数字),两个英文的下划线,接上名字再加上.sql,例如:V1.1__数据库初始化.sql

.sql文件里面可以放入数据库导出的脚本,也可以是自己写的SQL语句。

记得在application文件中配置好数据库的信息,驱动,用户名,密码。

当SpringBoot启动时,文件会自动被使用。以V开头的文件会只会生效第一次,而以R开头的文件每次启动SpringBoot都会使用一次。

当成功后可以看到数据库中有一个自动生成的名叫   flyway_schema_history  的表,这种表中的列和数据我拿一张图来解析下。

SpringBoot整合flyway_flyaway

flyway就是用flyway_schema_history这张表来记录执行信息的,当一份以V开头的文件被执行完之后会被记录到表中,而以R开头的文件因为每次启动都会执行一次,所有不会有记录到该表中。

当V开头的文件被执行后,其被记录到表中,一般来说,除非是删除flyway_schema_history,不然是无法再次执行该V文件的,如果在后来的情况中修改了V文件导致其信息和表记录的信息不符,还会在SpringBoot启动时报错。

单独的删除flyway_schema_history中的一列,似乎是无法正确使被执行的文件再次执行第二次的。

当删除flyway_schema_history这张表后,所有的V或者R文件都会从头到尾再次执行一遍,这个时候可能出现某些问题(例如:表存在覆盖创建之类的,等等……),可以通过在SpringBoot进行某些设置来解决一些问题。在application文件中,以spring.flyway开头。

注意

flyaway的版本号使用错误可能会无法运行,我使用的是SpringBoot 2.7版本,使用flyaway 10.x和flyaway8.x都有问题,只用5.x能够使用,原因还在研究中。