SpringBoot整合flyway

依赖:

        <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开头。

这次给我感悟最深的是:约定俗成的东西是很重要的,如果格式的可能性太多,那么就直接写死一个,然后把这个方式让别人知道,就这么用。

原文地址:https://www.cnblogs.com/woyujiezhen/p/13025018.html