引入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 的表,这种表中的列和数据我拿一张图来解析下。
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能够使用,原因还在研究中。