简化项目部署 ,SpringBoot引入 Flyway 管理数据库脚本文件

前言:

由于项目设计初期的设计缺陷,数据库字段设计的不够完整,我们在开发的过程中可能会不断的往数据库中增加表,增加字段,删除字段等操作,如果项目还没上线的话,就非常简单。如果项目上线的话我们就需要执行脚本。

这样就会造成一个问题,如何保证测试环境数据库和生产环境的字段一致呢,某个开发人员修改了测试库的一个字段,如何能够有效的同步到测试库,测试通过以后如何有效的同步到多个生产库。

在没有任何工具之前,我们需要各自手动执行脚本。然而我遇到了下面这个问题。

生产环境的数据库一般独立放,我们开发人员需要通过teamviewer 连接人家的电脑,我可以将我的脚本执行好,那么我的另一个同事也要远程连接人家的电脑,并且执行他的脚本,三个同事的话就要执行三次。你可能会说我一个人执行,存在别人漏给我说的情况,并且有个生产环境版本迭代会相对慢,比如一个礼拜,这样沟通成本就很高,别人用系统缺了字段就会报错,(我太难了)。

为了解决这个问题,我学了Flyway

Flyway 是什么? 

Flyway能够自动的帮助我们有效的同步各个发布数据库之间的状态,不管你是加了或者删了一个字段,还是新加了一张表,他都能自动化的跟随项目的发布同时发布。

Flyway 官方网址:

 https://flywaydb.org

如何使用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中查询执行成功的最大版本号进行对比,高于数据库中的版本号则会执行这个文件,

好了,这篇文章就先到这,后面发现更好的内容再次补充,感谢大家阅读。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章