Flyway - Version control for your database

Posted 超级珍贵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flyway - Version control for your database相关的知识,希望对你有一定的参考价值。

Flyway 是什么?

Flyway是个数据库版本管理工具。在开发过程中,数据库难免发生变更,例如数据变更,表结构变更、新建表或者视图等等。

在项目进行时无法保证一旦开发环境中的数据库内容变化候会去测试环境去更新数据库。

即使开发环境有变化不同时去测试环境执行,那么也需要保留所有的SQL脚本,待开发完成再去测试环境一一执行。

然后去生产环境又要去执行。

如果SQL脚本数量不多还可以接受,一旦数量过多,一个个脚本执行也是相当费时。

Flyway就用作解决此类问题。接下来的内容是在Maven中整合Flyway工具。

如果不想和Maven一起用,Flyway也有命令行、API、Gradle等方式,具体点击这里

接下来开始正片!

开始前准备

此文使用的Flyway 5.2.4版本,Java环境和Maven的安装不再赘述,对应Java和Maven版本如下:

环境:

  Java 8, 9, 10 or 11

  Maven 3.x

编辑器:

  IDEA

数据库:

  mysql

环境安装好之后需要新建一个Maven项目。

这里使用数据库是MySQL,如果不是MySQL也可以按照此文做,

不同的就是连接数据库的URL和数据库驱动,当然还有一些特定的配置也会不一样,但是没什么影响。

一切准备就绪之后开始Flyway的配置,以新建Person表为例。

整合Flyway

第一步

在Maven项目中引入框架或者插件或者其他工具,第一步就是修改pom.xml,引入相关的资源。

这里引入Flyway插件。

 1    <build>
 2         <plugins>
 3             <plugin>
 4                 <groupId>org.springframework.boot</groupId>
 5                 <artifactId>spring-boot-maven-plugin</artifactId>
 6             </plugin>
 7             <!--引入Flyway插件-->
 8             <plugin>
 9                 <groupId>org.flywaydb</groupId>
10                 <artifactId>flyway-maven-plugin</artifactId>
11                 <version>5.2.4</version>
12                 <configuration>
13                     <!--数据库连接URL-->
14                     <url>jdbc:mysql://localhost:3306/dbtrial?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC</url>
15                     <!--数据库连接用户名-->
16                     <user>root</user>
17                     <!--数据库连接密码-->
18                     <password>123</password>
19                     <!--指定数据库-->
20                     <schemas>dbtrial</schemas>
21                     <!--指定如果flyway_schema_history表不存在则新建-->
22                     <baselineOnMigrate>true</baselineOnMigrate>
23                 </configuration>
24             </plugin>
25         </plugins>
26     </build>

注意:因为在pom.xml 字符 “&” 被认作特殊字符,所以这里用 “&amp;” 

   <schemas>dbtrial</schemas>此配置是为了指定数据库中脚本在那个数据库下面执行。

     flyway_schema_history 表使用来记录执行日志的,下图是表中记录的内容,

     第一条是创建日志表,第二条是执行项目里面的SQL脚本(当然这是Flyway执行成功后才能看到的,现在提前贴出来方便理解):

   

    

  因为在创建项目时选择的是web项目,并且选了使用MySQL数据库所以已经有了MySQL的数据库驱动。

如果没有,则需要在pom.xml中添加依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

第二步

pom.xml修改完成之后,接下来需要准备要执行的SQL脚本。

但是在新建SQL脚本之前需要先在项目中创建一个文件夹存放脚本文件。

路径:\\src\\main\\resources\\db\\migration

注意:这里在创建文件夹时,Flyway默认的就是上面的路径。(虽然配置也可以修改,但是新学不建议搞得太复杂)

然后在创建好的路径下面新建SQL脚本文件

路径:\\src\\main\\resources\\db\\migration\\V1.1__CreatePersonTable.sql注意:文件的命名要使用推荐的格式如用V1.0、V1.1、V1.x这种格式。好处在于,

Flyway对脚本文件的命名非常敏感,格式不对可能会报错,再者就是利于查看,看文件名就能知道版本先后。

版本号后面一定要跟两个下划线。否则一直会报错文件名格式不正确。

目录结构:

SQL脚本:

create table PERSON (
    ID int not null,
    NAME varchar(100) not null
);

第三步

万事俱备只欠东风,最后我们需要做的就是让Flyway执行起来,自动更新数据库。

打开terminal,然后输入命令:

  

执行之后的输出信息:

 

然后查看数据库:

 

总结

入门级文章,如有错误或者疑问欢迎指出。

Flyway的功能很强大,支持市面上非常多的数据库。

能同时执行不同数据库的脚本,支持事务等等。

深入用法可以访问官网

 

以上是关于Flyway - Version control for your database的主要内容,如果未能解决你的问题,请参考以下文章

从版本 3 更新到 4 时,Flyway 更新不会迁移 schema_version 表

为啥我的 Gradle 构建失败并出现“未找到插件 [id: 'org.flywaydb.enterprise.flyway', version: '6.5.0']”错误?

Flyway Validate failed: Migration checksum mismatch for migration version 1.0.0.01 错误

使用Maven的Flyway Enterprise Edition错误:无法解决插件

Spring Boot中使用Flyway来管理数据库版本

springboot集成flyway,数据库是oracle