前言:
由于项目设计初期的设计缺陷,数据库字段设计的不够完整,我们在开发的过程中可能会不断的往数据库中增加表,增加字段,删除字段等操作,如果项目还没上线的话,就非常简单。如果项目上线的话我们就需要执行脚本。
这样就会造成一个问题,如何保证测试环境数据库和生产环境的字段一致呢,某个开发人员修改了测试库的一个字段,如何能够有效的同步到测试库,测试通过以后如何有效的同步到多个生产库。
在没有任何工具之前,我们需要各自手动执行脚本。然而我遇到了下面这个问题。
生产环境的数据库一般独立放,我们开发人员需要通过teamviewer 连接人家的电脑,我可以将我的脚本执行好,那么我的另一个同事也要远程连接人家的电脑,并且执行他的脚本,三个同事的话就要执行三次。你可能会说我一个人执行,存在别人漏给我说的情况,并且有个生产环境版本迭代会相对慢,比如一个礼拜,这样沟通成本就很高,别人用系统缺了字段就会报错,(我太难了)。
为了解决这个问题,我学了Flyway
Flyway 是什么?
Flyway能够自动的帮助我们有效的同步各个发布数据库之间的状态,不管你是加了或者删了一个字段,还是新加了一张表,他都能自动化的跟随项目的发布同时发布。
Flyway 官方网址:
如何使用Flyway?
1.新建的项目直接引入Flyway
直接在下图这个文件夹中管理数据库脚本文件
2. 原有的项目中引入 Flyway
2.1 在pom 文件中引入Jar包。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
2.2 需要在resource 文件夹下建立一个 db/migration 的文件夹,在这个文件夹下管理sql脚本数据。
2.3 SpringBoot 项目中配置了一个连接Mysql信息,数据库中准备一个叫test的空数据库。
2.4 写了一个需要执行的脚本文件
2.5 启动项目,看一下执行效果
可以看到我这个脚本中的文件都已经执行,并且生成了一张schema_version1的表,表里面添加了一条数据。
schema_version中添加了一条该脚本已经执行的数据,当我们再次启动这个项目的时候,这个脚本不会再执行,如果想脚本再次执行,直接删掉表中这条数据,该脚本就会执行。
2.6 新写的几个脚本文件
新增这俩个文件后,启动项目,运行成果,schema_history里面就有三条数据.
FlyWay有俩种运行文件,一种是以V开头的,紧接着是版本号,接下来__ (俩个下划线),再加一个文件后缀(.sql).
一般只会执行一次,执行过后,第二次启动项目便不会执行这个sql,如果需要执行,删除表里面对应的数据。
还有一种是R开头的文件,只要文件有变更修改便会执行。
项目启动运行后发现,当你有新的脚本 比如版本号为1.1 FlyWay 会去数据库中schema_version中查询执行成功的最大版本号进行对比,高于数据库中的版本号则会执行这个文件,
好了,这篇文章就先到这,后面发现更好的内容再次补充,感谢大家阅读。