一、问题产生

项目在多环境迭代开发过程中,数据库的表结构不断变更,在部署时,往往会出现数据库表结构未及时变更导致出现问题,耗费在表结构上的时间相当多,上线过程持续痛苦,代码有 GIT/SVN 来控制,数据库中的表版本也可以做到版本控制,本文讲解通过 flyway 的方式来管理数据库版本变动。一个项目单个环境迭代开发的过程中,对于数据库表的修改 DDL,可以通过版本控制工具一起进行控制。只需要在项目上线之前,人工执行新增的 DDL 即可,DDL 的版本是与当前项目迭代版本一致,细致点不至于出现问题。对于偏企业服务的公司而言,同一个项目会同时部署到多套环境当中。随着项目迭代进行,不同环境的项目版本可能并非是同步一致的,甚至因为有的环境需要定制化开发,出现同一个项目多个分支,代码也愈行愈远。于是在这种情况下,上线服务之前就很痛苦,要想起上线环境的当前表版本是多少,想不起来,就要对比线上库里的表,判断是否执行过了增量的 DDL,每个环境的增量 DDL 都可能是不同的,需要针对每个环境写不同的 DDL,发布时战战兢兢地生怕漏了执行哪个版本的 DDL 导致线上 Bug。那如何解决这种糟糕的情况呢?理想状态:项目启动时自动维护数据库版本到最新,不需要人工处理 DDL,避免出错。

二、Flyway 原理

Flyway 的原里是开发者将每个版本的 DDL 放到项目中,项目在新环境启动时,会自动创建一张表用于记录 DDL 的版本信息,随后自动执行未执行过的 DDL,同时将执行过的 DDL 信息存入元数据表中。下次再启动时,检测到执行过了,就不会重复执行。

三、Java 实践<

Java基础学习总结(183)—— Flyway 在项目中迁移数据实践相关推荐

  1. Java基础学习总结(131)——项目开发中真的有必要使用Lombok插件么?

    一.Lombok是什么 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法.简而言之,一句话就 ...

  2. Java基础学习:尚硅谷项目三 开发团队调度软件

    Java基础学习:尚硅谷项目三 开发团队调度软件 一.软件功能与结构设计 1. 软件功能 该软件实现以下功能: 软件启动时,根据给定的数据创建公司部分成员列表(数组) 根据菜单提示,基于现有的公司成员 ...

  3. java基础学习-4

    Java基础学习-4 static 注意事项 重新认识main方法 继承 小练习 子类到底能继承父类中的哪些内容(第126集)*** 继承过程中成员变量和成员方法的访问特点 小练习 小总结 构造方法的 ...

  4. java基础学习_IO流03_字符流、IO流小结、案例_day21总结

    java基础学习_IO流03_字符流.IO流小结.案例_day21总结 ================================================================ ...

  5. java基础学习-6

    Java基础学习-6 双列集合 Map的常见API Map的遍历方式 HashMap 小练习 LinkedHashMap TreeMap TreeMap--小练习1 TreeMap--小练习2 Tre ...

  6. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

  7. java基础学习整理(一)

    java基础学习整理(一) lesson1: D0s命令: 1.回到根目录,>cd \ 2.复制命令行下的内容,右击标记所要复制的内容,这样就已经复制好了,右击粘贴就可以了. 3.查看,设置环境 ...

  8. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  9. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

最新文章

  1. window服务器cpu过高的排查_高频面试题:Java程序占用 CPU 过高怎么排查
  2. 4.3)深度卷积网络:目标检测
  3. CentOS 6.5下Python3.5以及virtualenv、virtualenvwrapper的安装配置
  4. Max OS X下关于JDK的那些事
  5. ckeditor复制html样式丢失,Ckeditor选择html无法正常使用铬浏览器
  6. CSV格式整理,去除与上一行数据重复的单元格
  7. devc运行不出窗口_足不出户“云出庭”?沾化“智慧检务”让法律监督“不打烊...
  8. STM32工作笔记0020---新建工程模板基于寄存器-M3
  9. 基于nodej脚手架express-generator,生成express项目
  10. 在浏览器中将表格导入到本地的EXCEL文件,注意控制内存
  11. php对字符数组进行排序,php数组去重_php对数组中字符串去重并排序例子
  12. 网络工程师经常会面对服务器性能,下半网络工程师试卷(下午).doc
  13. 计算机系一班班会,迎新 · 破冰会|“情暖计算机,友爱一九一”——记计算机类19-1班新生破冰班会...
  14. 仿淘宝购物车demo---增加和减少商品数量
  15. 转 Android屏幕适配全攻略(最权威的官方适配指导)
  16. 怎么将不可编辑的英文PDF文档翻译成中文
  17. android 全屏广告,手机端全屏广告展示问题
  18. 二叉查找树BST基本操作(一)
  19. DSRC通信协议标准
  20. 悲观锁 乐观锁的原理及应用场景

热门文章

  1. 计算机二级c语言改错,国家计算机二级C语言机试改错试题及答案.doc
  2. php判断平年和闰年,平年和闰年的三种判断方法
  3. matlab csapi代码,【matlab】樣條函數:csapi、spap2和augknt的使用
  4. 5个python标准库及作用_零基础编程——Python标准库使用
  5. python遇到的问题-Python常见问题
  6. C++基础与深度解析第七章:深入IO
  7. linux shell指令 amp,shell入门基础amp;常见命令及用法
  8. oracle 空值的排序问题 (转载),sqlserver、oracle数据库排序空值null问题解决办法
  9. 第一次java怎么创建一class_Java:如何创建Class参数?
  10. php织梦,帝国,帝国 织梦 php