依赖:
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
约定俗成的配置:
resource文件夹下创建db/migration文件夹,里面放入自己写的.sql文件,格式如下:
V或者R开头(注意,必须是大写),然后版本号(数字),两个英文的下划线,接上名字再加上.sql,例如:V1.1__aa.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开头。
这次给我感悟最深的是:约定俗成的东西是很重要的,如果格式的可能性太多,那么就直接写死一个,然后把这个方式让别人知道,就这么用。