Spring Boot项目使用Flyway的详细教程

所属分类: 软件编程 / java 阅读数: 63
收藏 0 赞 0 分享

Purpose

开发人员在合作的时候经常遇到以下场景:

1.开发人员A在自己的本地数据库做了一些表结构的改动,并根据这些改动调整了DAO层的代码,然后将代码上传到svn或git等版本控制服务器上。此时如果开发人员B拉取了A的代码改动,在运行项目的时候很可能会报错,因为B的本地SQL数据库并没有修改。

2.在项目上线的时候,当服务器拉取的版本控制服务器的最新修改后,必须同时运行SQL数据库的修改脚本,如果忘了跑数据库脚本,那么会出现严重的问题。

传统的解决方案就是在一个固定的文件夹中,将需要跑的SQL脚本放在里面。开发人员在合作的时候,A修改了数据库,在B遇到问题的时候,可能需要交流沟通一下,去跑需要的脚本。在项目上线的过程中,也是运维人员在规定的文件夹中,找到需要跑的SQL脚本。运行它们。

Flyway等migration工具就是要把开发人员和运维人员从以上这些场景的繁琐工作中解放出来,如果使用maven的话,那么在项目编译(SpringBoot运行Application)的时候,SQL数据库的改动就自动进入数据库,只要启动成功,开发或者运维人员对SQL数据库的migrate过程是无感知的,项目依然可以照常运行。

Technical Background

To read and practice this document, user ought to be able to develop projects via git, SpringBoot and MySQL.

Instructions - Run Demo

1.下载demo源码:

git clone https://git.oschina.net/dreamingodd/spring-boot-flyway-demo.git

2.使用Intellij或Eclipse import existing maven project。

3.在本地mysql console中运行:

create database flyway_test;
use flyway_test;

4.修改配置文件,将username和password改成本地MySQL数据库的。

5.运行FlywayTestApplication类。

6.在mysql console中运行

show tables;

即可看到以下结果:

(schema_version表保存了数据库版本信息,哪些脚本已经被执行,先不用管)

7.一张demo表被自动创建出来了。

What Happened

以上过程是如何实现的呢?

Flyway在maven项目编译(SpringBoot运行Application)的时候,自动扫描resources/db/migration目录下的文件,

打开V1_demo.sql:

就是刚刚自动运行的SQL脚本。添加脚本的话,依次使用V2__XXX.sql,V3__XXX.sql,以此类推,脚本中使用正常的SQL语句即可,没有任何学习负担。

这样,在开发人员合作以及项目部署的时候,Flyway就起到了加强自动化部署、实践持续交付等作用。

Instruction - Use in Current Project

那么如何在已经开发了一段时间的项目中使用Flyway呢?

1.Maven配置

<dependencies>中加上

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

<build>中加上

<plugin>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-maven-plugin</artifactId>
 <version>4.0.3</version>
</plugin>

2.application.properties配置

flyway.baselineOnMigrate=true

如果是application.yml,则为

flyway.baselineOnMigrate: true

3.在resources/db/migration中添加V1__XXX.sql,mvn compile(运行Application)即可看到SQL脚本运行结果。(注意V1后面是两个下划线)

Appendix

1.出现错误的解决方法:

如果你的SQL脚本运行失败,到schema_version表中删除最新一条数据,

比如我故意写一个错误的SQL语句到V2__demo2.sql,运行mvn compile(运行Application)。

可以看到最新一条的success列为false。

如果部分成功了,要手动rollback,修改SQL脚本正确后再次mvn compile(运行Application)。

2.更多信息请访问官网:https://flywaydb.org/

更多精彩内容其他人还在看

SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。这篇文章主要介绍了SpringBoot中使用Ehcache的相关知识,需要的朋友可以参考下
收藏 0 赞 0 分享

在idea 中添加和删除模块Module操作

这篇文章主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java spring整合junit操作(有详细的分析过程)

这篇文章主要介绍了java spring整合junit操作(有详细的分析过程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解JAVA 弱引用

这篇文章主要介绍了 JAVA 弱引用的相关资料,帮助大家更好的理解和学习java引用对象,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

深入了解JAVA 虚引用

这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解JAVA 强引用

这篇文章主要介绍了JAVA 强引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

java中的按位与(&)用法说明

这篇文章主要介绍了java中的按位与(&)用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入了解JAVA 软引用

这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

利用MyBatis实现条件查询的方法汇总

这篇文章主要给大家介绍了关于利用MyBatis实现条件查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

这篇文章主要介绍了Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.Pa
收藏 0 赞 0 分享
查看更多