SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑

这篇具有很好参考价值的文章主要介绍了SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

Git/ SVN 是代码界的版本控制工具,那么,Flyway 就是一款数据库界的版本控制工具,

它可以记录数据库的变化记录。可能很多公司都是通过人工去维护、同步数据库脚本,

但经常会遇到疏忽而遗漏的情况,举个简单的例子:

我们在开发环境对某个表新增了一个字段,而提交测试时却忘了提交该 SQL 脚本,导致出现 bug 而测试中断,

从而影响开发、测试的工作效率。有了 Flyway,我们可以按版本约定,统一管理所有的 SQL 脚本变更,

在所有环境自动同步数据库,而无需人为手工控制,再也不用担心因数据库不同步而导致的各种环境问题。

官网:Homepage - Flyway

下面记录在SpringBoot项目中集成Flyway的过程。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、首先搭建SpringBoot项目并配置连接Mysql的依赖和配置文件,然后pom文件中添加flyway的依赖

        <!-- flyway sql版本管理 -->
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>7.10.0</version>
        </dependency>

只需添加以上依赖即可,这里示例的完整依赖为

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--MySQL驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--MyBatis整合SpringBoot框架的起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.1</version>
        </dependency>
        <!-- flyway sql版本管理 -->
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>7.10.0</version>
        </dependency>
    </dependencies>

2、然后在yml中添加flyway的相关配置

放在spring节点下

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

配置的内容为

  flyway:
    #是否启用
    enabled: true
    # 可以支持多个location, 用','隔开
    locations: classpath:db/migration
    # 是否允许无序的迁移,默认false
    out-of-order: false
    # 是否创建元数据表
    validate-on-migrate: true
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是false 理论上作为默认配置是不科学的
    clean-disabled: true
    # 如果数据库不是空表,需要设置成 true,否则启动报错
    baseline-on-migrate: true
    # 版本控制日志表,默认flyway_schema_history,不同系统建议修改数据
    # table: flyway_schema_history

3、上面配置的locations即为sql文件的存放位置,这里也是默认位置,可自由配置。

这里的脚本sql的命名规则是

V + 版本号(版本号的数字间以”.“或”_“分隔开) + 双下划线(用来分隔版本号和描述) + 文件描述 + 后缀名

注意这里的双下划线来分割版本号和文件描述。

示例:

V20230710_1__init.sql

比如这里初始化数据库的sql这样命名,代表执行初始化数据的操作,比如建表或插入基础数据等。

可以在Navicat等客户端软件中直接将基础库导出为sql并重命名。

将上面的sql放到resource目录下新建的db目录下的migration目录下

 SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

4、先执行初始化基础库的sql,这里启动项目如果没有报错并能看到以下执行成功的提示

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

此时查看数据库,会新建表flyway_schema_history表,这是版本记录表。

并且验证init的sql文件已经执行成功。

假如我们要修改其中某个表,比如给user表添加一个字段。

首先通过Navicat等软件修改本地表添加字段

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

在Navicat中修改表字段可以直接在SQL预览中看到执行操作的sql。

比如这里新增address字段的SQL预览为

ALTER TABLE `test`.`user`
    ADD COLUMN `address` varchar(255) NULL AFTER `pass`;

再新建V20230710_2__add_address_to_user.sql文件,将上面的sql内容复制进来。

此时代表版本2的更改。

重启项目,查看日志,当前版本执行到2

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

并且历史记录包中记录也新增

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

本地将address字段删除后,重启项目后会发现会执行版本2的添加字段的操作。

5、遇到的坑

SpringBoot中集成Flyway启动时提示:

Flyway failed to initialize: none of the following migration scripts locations could be found:

SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑,SpringBoot,数据库,spring boot,sql

仔细核对配置与目录均正确。

报错是因为在IDEA新建目录时直接使用db.migration创建,会被认定为一个目录,

应该在resource下先新建db再在db下新建migration目录。

另外要注意如果发现目录下的sql没有执行,一定要注意sql文件的命名格式,尤其是使用双下划线来区分版本号和描述。文章来源地址https://www.toymoban.com/news/detail-545393.html

到了这里,关于SpringBoot中集成Flyway实现数据库sql版本管理入门以及遇到的那些坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(41)
  • 在SQL server中用sql语句实现数据库的备份以及还原

    本文给大家提供并讲解了在SQL server中用SQL语句实现数据库的备份已经还原 假设你已经有一个数据库Student 创建备份设备,其名称为bk_Student,保存文件为D: Student.bak,并对Student数据库进行完全备份,备份到备份设备bk_ Student中。  在Student数据库中,创建一张表temp并对Student数

    2024年02月03日
    浏览(35)
  • Excel 2019访问SQL Server数据库的实现过程

    源之:https://vip.kingdee.com/article/288066926977041920?productLineId=11 在日常ERP系统实施过程中,往往会遇到客户的一些个性化需求,比如有些客户习惯用Excel电子表格来查看ERP系统中的数据,业余拓展学习了一下,借助ODBC可以实现这个需求。 一、ODBC数据管理和SQL数据库之间的连接的建

    2024年02月11日
    浏览(35)
  • Springboot 实践(7)springboot添加html页面,实现数据库数据的访问

            前文讲解,项目已经实现了数据库Dao数据接口,并通过spring security数据实现了对系统资源的保护。本文重点讲解Dao数据接口页面的实现,其中涉及页面导航栏、菜单栏及页面信息栏3各部分。 1、创建html页面         前文讲解中,资源目录已经建设完成,如图

    2024年02月12日
    浏览(24)
  • JDBC如何连接SQL Server数据库实现增删改查

    目录 一、连接前准备  1. 环境配置  2. 下载JAR包 3. 添加环境变量 4. 导入JDBC包  二、连接SQL Server  三、实现增删改查 1. 查询数据 2. 添加数据 3. 修改数据 4. 删除数据 5. 拓展 JDBC的全称是Java数据库连接 (Java DataBase Connectivity) ,应用程序通过JDBC连接到数据库,使用SQL语句对数

    2024年02月03日
    浏览(46)
  • SpringBoot实现Md5对数据库数据加密

            因为开学等各种原因,导致更新的速度越来越慢,当然在此期间也进行了一些其他技术的学习,今天给大家带来的就是我们的通过MD5进行数据库加密。         MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要

    2024年02月09日
    浏览(41)
  • 使用springboot实现查询更改数据库需求

    使用springboot实现简单的数据库数据交互请求 实现:通过springboot框架,实现接口 /user/view; 查询数据库user表中的user数据, /user/insert; 新增user数据到user表 /user/update 修改user的对应user信息 集成规范数据响应: 功能实现: 定义简单的user类并添加对应的user表,用于数据交互 创建数据访问

    2024年02月16日
    浏览(24)
  • 数据库课程设计-学生选课管理系统(实训报告+答辩ppt+源码+sql文件+打包好的程序)springboot项目-javaweb

    作者:ChenZhen 博客地址:https://www.chenzhen.space/ 版权:本文为博主 ChenZhen 的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明。 如果对你有帮助,请给一个小小的star⭐ 源码加vx : ChenZhen_7 (实训报告+答辩ppt+源码+sql文件+打包好的程序 无套路 免费获取! 不放

    2024年02月11日
    浏览(53)
  • 自己动手写数据库系统:实现一个小型SQL解释器(中)

    我们接上节内容继续完成SQL解释器的代码解析工作。下面我们实现对update语句的解析,其语法如下: UpdateCmd - INSERT | DELETE | MODIFY | CREATE Create - CreateTable | CreateView | CreateIndex Insert - INSERT INTO ID LEFT_PARAS FieldList RIGHT_PARAS VALUES LEFT_PARS ConstList RIGHT_PARAS FieldList - Field ( COMMA FieldList)?

    2024年02月12日
    浏览(34)
  • 内网穿透实现在外远程SQL Server数据库 - Windows环境

    目录 前言 1. 本地安装配置SQL Server 2. 将本地sqlserver服务暴露至公网 2.1 本地安装cpolar内网穿透 2.2 创建隧道 3. 公网远程连接sqlserver 3.1 使用命令行远程连接sqlserver, 3.2 使用图形界面远程连接sqlserver 3.3 使用SSMS图形界面远程连接sqlserver 4. 配置固定TCP端口地址 4.1 保留固定TCP地址

    2023年04月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包