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

作者:dreamingodd 时间:2021-12-19 12:05:58 

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数据库的。

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

5.运行FlywayTestApplication类。

6.在mysql console中运行


show tables;

即可看到以下结果:

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

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

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

What Happened

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

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

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

打开V1_demo.sql:

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

就是刚刚自动运行的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)。

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

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

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

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

来源:https://www.cnblogs.com/dreamingodd/p/6125435.html

标签:Spring,Boot,Flyway
0
投稿

猜你喜欢

  • SpringMVC 向jsp页面传递数据库读取到的值方法

    2022-03-29 00:51:15
  • java中Hibernate缓存形式总结

    2023-10-19 15:57:43
  • Flutter实现矩形取色器的封装

    2023-06-19 04:08:47
  • MyBatis字段名和属性名不一致的解决方法

    2022-12-15 18:15:22
  • JAVA中数组从小到大排序的2种方法实例

    2021-10-09 09:46:18
  • 详解spring boot配置单点登录

    2022-07-27 11:50:11
  • java 反射机制详解及实例代码

    2023-01-31 10:26:08
  • SprintBoot深入浅出讲解场景启动器Starter

    2023-11-24 20:58:58
  • Java单例模式分析

    2023-11-16 03:17:06
  • Java monitor机制使用方法解析

    2023-11-09 11:25:56
  • SpringBoot如何进行对象复制的实践

    2023-11-23 03:40:19
  • java 使用idea将工程打成jar并创建成exe文件类型执行的方法详解

    2022-12-07 02:49:30
  • SpringBoot项目中如何访问HTML页面

    2021-08-09 11:19:07
  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    2023-07-15 04:37:18
  • JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    2023-11-28 19:46:08
  • Java经典算法汇总之选择排序(SelectionSort)

    2021-12-23 03:59:52
  • java IO流 之 输出流 OutputString()的使用

    2023-08-11 23:16:30
  • Java编写迷宫小游戏

    2021-08-06 12:53:33
  • Springboot整合Shiro的代码实例

    2021-09-03 04:16:52
  • MyBatis常用的jdbcType数据类型

    2023-09-18 19:09:35
  • asp之家 软件编程 m.aspxhome.com