ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库版本管理工具Flyway使用介绍

2020-02-20 14:39:24  阅读:310  来源: 互联网

标签:脚本 创建 数据库 管理工具 flyway Flyway sql


一、引言

在日常开发中,我们可能经常遇到这样的问题,由于项目需求的变化,或者前期需求设计不完善,导致在后期需要修改已经设计好的数据库表结构。如果是一个新开发的项目,还处于开发阶段,新增字段还好,但是如果是调整某些字段,是不是有点奔溃呢?是不是会考虑过把需要调整的表删除了重新创建呢?

目前对于数据库版本进行管理的工具,主要有两个:Flyway、Liquibase。对于 Liquibase 本文不做过多介绍,了解就好。下面主要介绍一下 Flyway

Flyway官网地址:https://flywaydb.org/getstarted/how

二、在SpringBoot项目中使用Flyway

1、新建项目添加Flyway

对于在一个全新的SpringBoot项目中,如何使用 Flyway 呢?这个很简单,只需要在新建项目时,勾选一下 Flyway 选项就可以使用,具体操作如下图:
在这里插入图片描述
当项目创建成功后,可以看一下 pom.xml 文件里会自动加上 Flyway 的依赖,并且会在 resources 目录下自动创建一个 db/migration 目录,这个目录用来存放数据库脚本的,具体如如下:
在这里插入图片描述

2、已有项目或模块添加 Flyway

如果要在已有项目或者模块中使用 Flyway,步骤和上面的一样。只不过手动操作上面两步,第一步要在pom.xml中添加flyway 的依赖,如下所示:

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

第二步在对应的项目或者模块下的 resources 目录下,手动创建 db/migration 目录即可。

当我们经过上面两步后,我们需要在db/migration 目录下创建数据库脚本文件,脚本文件的命名方式如下:

V<VERSION>__<NAME>.sql

说明:首先是大写字母 V,然后是版本号,要是有小版本可以用下划线隔开,例如 3_1,版本号后面是两个下划线,然后是脚本名称,文件后缀是 .sql。

举个例子:现在需要创建 test数据库(第一次创建),数据库中包含3个表,数据库脚本文件的名称如下。我们只需要把test数据库中所有的建表语句以SQL的形式导出,拷贝到下面的文件中就可以了。

V1__test.sql

完了之后,不用添加额外配置,只需要在 MySQL 中创建一个空的 test 数据库即可,然后直接启动项目,项目启动成功后,就会自动帮我们把所有表都创建好。

当我们启动项目时,可以发现数据库脚本会被执行,同时 Flyway 还给创建了一个 flyway_schema_history 表,这个表是Flyway自己创建的,用来记录数据库的更新历史。我们可以看一下这表的具体结构:

在这里插入图片描述
有了这条记录,下次再启动项目,V1__test.sql 这个脚本文件就不会执行了,因为系统知道这个脚本已经执行过了,如果你还想让 V1__test.sql 脚本再执行一遍,需要手动删除 flyway_schema_history 表中的对应记录,那么项目启动时,这个脚本就会被执行了。

脚本执行细节说明

我们在定义脚本的时候,除了 V 字开头的脚本之外,还有一种 R 字开头的脚本,V 字开头的脚本只会执行一次,而 R 字开头的脚本,只要脚本内容发生了变化,项目启动时脚本就会被重新执行。

使用了 Flyway 之后,如果再想进行数据库版本升级,就不用修改以前的数据库脚本了,直接创建新的数据库脚本,项目在启动时检测了有新的更高版本的脚本,就会自动执行。

所有的脚本,一旦执行了,就会在 flyway_schema_history 表中有记录,如果你不小心搞错了,可以手动从 flyway_schema_history 表中删除记录,然后修改 SQL 脚本后再重新启动。

三、Flyway在SpringBoot中的配置

在 Spring Boot 中,关于 Flyway 也有不少配置,这些配置都在 application.properties 中进行配置,常用的几个来和大家说下:

1、spring.flyway.enabled

指定是否开启 flyway,默认就是开启的;

2、spring.flyway.encoding

指定 flyway 字符编码;

3、spring.flyway.locations

sql 脚本的目录,默认是 classpath:db/migration,如果有多个,用逗号隔开;

4、spring.flyway.table

配置数据库信息表的名称,默认是 flyway_schema_history;

5、spring.flyway.clean-disabled

这个属性很重要,它表示是否要清除已有库下的表,如果执行的脚本是 V1__xxx.sql,那么会先清除已有库下的表,然后再执行脚本,而且它默认就是要清除,生产环境一定要自己配置设置为 true。

配置实例:
在这里插入图片描述

止步前行 发布了125 篇原创文章 · 获赞 231 · 访问量 20万+ 私信 关注

标签:脚本,创建,数据库,管理工具,flyway,Flyway,sql
来源: https://blog.csdn.net/zxd1435513775/article/details/104392489

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有