天天看点

Springboot集成flyway实现数据库自动迁徙

前言

Flyway是一款管理并跟踪数据库迁移(migrate)的数据库版本管理工具。它可以像SVN管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

它可以帮助我们在不同环境保持数据库的同步,减少手工操作,同时也减少了遗漏的机会。

Flyway可以集成在项目中,可以与Spring 框结合。在项目发版时,自动执行数据库脚本,无需人为执行数据库同步操作。

在主项目中添加flyway的maven添加依赖

<!-- flyway--> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.1</version> </dependency>

将上面的依赖添加到主项目的pom.xml中

Springboot集成flyway实现数据库自动迁徙

2. 在application.yml 配置文件中配置flyway相关配置

需要注意的是,flyway配置放在spring配置下、根据自己实际情况配置相关参数

Springboot flyway配置说明

3.在迁移脚本的文件夹中创建对应sql脚本

Springboot集成flyway实现数据库自动迁徙

在脚本中写入相关sql语句

Springboot集成flyway实现数据库自动迁徙

SpringBoot应用运行时flyway会根据脚本进行数据库的初始化,执行的顺序会根据脚本版本号由低到高按顺序执行(1.0 -> 1.0.1 -> 1.0.2),每执行完一个版本脚本都会向记录表flyway_history_schema插入一条数据。

 若添加了新的版本脚本,应用启动时flyway会根据脚本文件版本到记录表flyway_history_schema查询是否有对应的版本脚本被执行了,如果没有相应的版本脚本记录才会执行脚本。

 不过需要注意:flyway不支持版本回滚。(需手动,比较悲剧的一点)、所以需要准备两份sql,如果迁移的sql执行成功后需要回滚,就执行对应的回滚sql,如果迁移失败,flyway可以通过注解执行回滚。

4.启动了SpringBoot项目后,就会自动帮你执行SQL文件

 执行历史可以在 flyway_schema_history 表中查看、已经执行过的迁移sql就不会再执行,主要是在这个历史表中控制,如果需要重新执行,那么删除对应版本及以后的执行历史重启项目就会重新执行对应脚本

Springboot集成flyway实现数据库自动迁徙

刷新对应数据库,就可以看到通过迁移脚本生成的表结构。

Springboot集成flyway实现数据库自动迁徙

    我们是在中途尝试使用flyway,所以开发环境会有一个已存在的数据库。我们需要从开发环境中导出数据库脚本,并对开发环境数据库进行baseline标记。导出的脚本可用于新环境的部署。

    如果我们已经有了生产环境,而且生产环境和开发环境的数据库已经有了较大的差异。暂时可以想到的方案大概有2个方案:

方案一:

   在生产环境备份数据库,然后创建一个全新的数据库,手动将备份库里的数据导入到新的数据库。

方案二:

   基于生产环境的数据库,创建V1版本的脚本;基于开发库相对于生产库的变更,创建V2版本的脚本。在开发环境baseline,然后修改版本记录,改为2。在生产环境中baseline,然后migrate使其升级到2。

   需要更多的人工介入,但是比较稳妥;

   难点在于溯源出正确的差异,编制V2脚本。

本次的学习到这里就结束了,因为图图也是第一次接触这种数据迁移软件,所以总结不是很到位,如果有问题可以加图图微信,大家一起学习、一起来解决。

如果对您有帮助 请点个关注,万分感谢

                                (QQ招聘群  710566091微信招聘群 请加图图微信)

Springboot集成flyway实现数据库自动迁徙