zoukankan      html  css  js  c++  java
  • 数据库版本管理工具--Flyway的使用

     

    软件开发正常流程是:开发环境 ---> 测试环境  ----> 产环境

    在开发过程中经常需要变更数据库:

    1. 表结构变更。
    2. 基础数据变更。

    最直接的做法是:用客户端连上数据库直接修改。 依次修改开发、测试、正式环境。

    这样做的风险是:

    1. 容易漏改,经常会造成开发、测试、生产环境数据结构不一致导致程序异常,排查错误浪费了大量时间。
    2. 没有记录下修改过程,数据结构出现问题很难复盘出历史修改过程。
    3. 完全靠人工约束,给项目管理增加额外难度。

    改进方案:

    所有数据库修改都需要通过sql 语句修改,sql语句同源代码一样纳入版本控制系统(如git),采用工具(flyway等)自动在不同环境执行sql语句,流程如下:

    1. 开发:将本次数据库改动写成sql语句放到文件中,在开发环境执行flyway让数据库改动生效。
    2. 测试:项目上线到测试环境前,先执行flyway 。
    3. .上线:在正式环境执行flyway.

    如何使用

    项目介绍:

    官网: https://flywaydb.org/getstarted/firststeps/maven 

    源码:https://github.com/flyway/flyway

    该项目是非常活跃的项目,如下图:

     

    运行方式:

    flyway 支持多种用运行方式:

    插件模式:

    可以作为ant maven gradle 的插件运行 ,这种模式不用写代码,只需要配置就OK了。

    编码模式:

    flyway 提供了接口,可以在通过编写代码来运行。

    运行:

    按照文档https://flywaydb.org/getstarted/firststeps/maven  一步一步操作:

    1. 新建一个maven 项目:

     

     

    1. 导入到IDEA 后如下图:

    注意问题:

    1. 文件命名规则: 必须以 V数字__ 开头,否者无法通过。
    2. 文件命名规则: V1__xx  V2__xxx  数字必须连续性,否则,无法运行。

    一旦执行入库,则文件不能再修改,每次执行之前会进行文件md5校验。

    删除文件对应的数据库记录后方可再次执行(不建议这么做,这么做会引起版本的混乱)。

    源码解读:

    1.用git命令将该项目clone下来:

    2.将项目导入到你熟悉的IDE 中(如intellij 或者 Eclipse),这是一个maven 项目,需要按照maven项目导入,导入需要下载很多jar包,比较耗时。导入后如下图:

     

    优缺点:

    优点:

    1.原理简单,使用方便。

    缺点:

    1. 没有引入并发控制,如果在两台机器上并行执行该命令,则并发情况下可能执行两边,如果是 update  t1=t1+1  where id=1 ,那么会导致结果错误。

    类似项目:

    http://www.liquibase.org/ 

    这个工具提供比flyway 更强大的功能,flyway几乎是liquibase 的一个子集。

     工具并不是越强大越好,正确的做法是根据需求灵活选择。

    Java开发、互联网架构讨论QQ群: 297702426

    邮箱:zfj321@qq.com  需要源码可以联系我,或者加入以上QQ群

  • 相关阅读:
    Hiho----无间道之并查集
    Linux之压缩与解压
    Linux之用户和用户组
    Linux之关机/重启命令及一些符号
    Linux之基本操作命令
    Linux之vi/vim
    解决eclipse中maven报错Failed to read artifact descriptor for xxxx:jar
    CentOS 7下 solr 单机版安装与配置
    CentOS 7下 Tomcat7 安装与配置
    CentOS 7下 JDK 1.7 安装与配置
  • 原文地址:https://www.cnblogs.com/kevin7234/p/7675734.html
Copyright © 2011-2022 走看看