美文网首页
2019-10-21 flyway初体验

2019-10-21 flyway初体验

作者: 程序员的交流电 | 来源:发表于2019-10-20 23:40 被阅读0次

    简介

    flyway是用java编写的开源的数据库版本管理工具,或者说是数据库结构变更工具,旨在帮助运维更容易的管理数据库演进过程中的各个版本。他的源码在github上面。
    在日常的开发中,大部分的人都听说过,代码的版本管理,git,svn等,很少听说过数据库的版本管理工具。在数据库较小的情况下,人工操作比较有把握,直接人工做结构的变迁。可是当数据库结构复杂的(生产,测试,开发,预发布),人工处理就显得力不从心了。在大型项目建立之初,为了方便,可以直接的手动修改,但是当项目整体已经完成,并且稳定下来,就要逐步的完善研发流程和规范,避免因为这些小事影响了项目。

    环境准备

    idea,maven,jdk,mysql的docker容器

    注意点

    flyway有多种使用的方式,有java代码,maven插件等,这里我采用的是maven插件的方式。

    启动mysql的docker容器
    docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    
    连接mysql容器里面的mysql,创建数据库testflyway:create database testflyway;
    方式1 直接连接:
     docker exec -it mysql  /bin/bash mysql -uroot -p123456 
    方式2 进入mysql容器在连接:
    docker exec -it mysql /bin/bash
    mysql -uroot -p123456
    
    maven插件
    <build>
            <plugins>
                <plugin>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-maven-plugin</artifactId>
                    <version>4.0.3</version>
                    <configuration>
                        <url>jdbc:mysql://192.168.33.88:3306/ggg</url>
                        <user>root</user>
                        <password>123456</password>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>5.1.38</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    
    约定大于配置,flyway默认文件夹在resource/db/migration,在里面配置版本数据迁移文件,注意文件名是有严格要求的。
    image.png
    执行mvn flyway:migrate。 flyway会自动的找到数据迁移文件执行的。

    这个时候去数据库里面查看就可以看到本来空空的testflyway数据库里面存在了两张表PERSON和schema_version,其中PERSON是flyway按照文件创建的,schema_version是flyway进行版本控制的数据表。
    这里有注意一件事,要使用flyway要区分显示是不是初始项目的,(初始项目,也就是只建立了数据库但是数据库里面没有任何表),当初始项目的时候,可以直接使用上面的这这种方式。
    还有一般使用flyway做数据表结构的版本控制,但是也是可以做数据的版本控制的,但是这个并不是特别的有优势,因为数据是一直变换的,flymay对数据的版本控制并不会有太大的作用,所以,一般用作表结构的版本控制。
    每次执行mvn flyway:migrate的时候,其实flyway都是会到db/migration文件夹下面查找所有的数据迁移文件的,但是只会执行版本号大于数据库里面的schem_version版本的文件的。其他小于等于的文件会自动的忽略的
    也就是说,每当需要发展数据库的时候,无论是结构ddl还是数据dml,只需要创建版本号高于当前的版本的新的迁移就可以了,当下一次执行flyway的时候,会自动的相应的升级数据库的。

    项目已经有历史数据

    这个时候,不可以直接的使用mvn flyway:migrate,要使用mvn flyway:baseline先由flyway构建最初的v1版本的数据迁移,然后在执行mvn flyway:migrate来执行数据迁移。

    参考文章:
    https://blog.csdn.net/u010963948/article/details/77801431
    https://juejin.im/entry/5c948530f265da60ce37a62d
    http://qinghua.github.io/flyway/

    相关文章

      网友评论

          本文标题:2019-10-21 flyway初体验

          本文链接:https://www.haomeiwen.com/subject/dlfxvctx.html