SpringBoot整合数据库版本管理工具Liquibase,赶紧整起来!

news2024/11/28 10:53:56

SpringBoot整合数据库版本管理工具Liquibase

  • 背景
  • 一、什么是数据库版本管理工具?
    • 数据库版本管理工具主要特性
    • 什么是数据库版本管理工具
    • Flyway和Liquibase对比及选型
  • 二、Liquibase整合步骤
    • 1.引入pom依赖
    • 2.配置application.yml
    • 3.新建master.xml(用于配置你的增量脚本)
  • 总结


背景

日常开发中,大家有没有遇到一个问题,随着系统越来越复杂,业务模块越来越多,数据库脚本维护变成一个难题,特别是系统版本多起来了,有定制化的需求后,不同版本的数据库脚本维护更加难了,每次发版都需要整理测试环境新增的脚本到生产环境,这无疑是非常痛苦的,这个时候我们就需要一款数据库版本维护工具来维护我们的数据库脚本。


提示:以下是本篇文章正文内容,仅供参考

一、什么是数据库版本管理工具?

数据库版本管理工具主要特性

  • 从迁移脚本中创建新的数据库
  • 检查数据库状态
  • 从一个版本快速到达另外一个版本

什么是数据库版本管理工具

数据库版本管理工具顾名思义是用来管理数据库版本的,像我们的代码有svn和git管理,那么数据库版本怎么来控制呢?当然是用数据库版本管理工具来了,目前主流的数据库管理工具有Flyway和Liquibase,这里我们选择使用Liquibase。

Flyway和Liquibase对比及选型

共同点:

数据库迁移工具很多,Flyway和Liquibase之所以比较常用是因为springboot内置集成了这两个工具,使用起来比较方面。

差异点:

Flyway的好处在于简单,而且直接书写SQL并不需要额外的学习,直接将你需要执行的SQL语句保存为文件,放入应用中执行即可,缺点在于如果项目切换了数据库类型,原来维护的sql也就需要改动了。
Liquibase相对就复杂,优点在于兼容多数据库,不需要重新写sql。

两款数据库迁移工具其实定位上是差别的,一般来说,整体变动不大的小项目用Flyway,而大应用和企业应用用Liquibase更合适。

二、Liquibase整合步骤

1.引入pom依赖

代码如下(示例):

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

2.配置application.yml

配置如下(示例):

spring:
  liquibase:
    change-log: classpath:liquibase/master.xml #指定master.xml文件的位置

3.新建master.xml(用于配置你的增量脚本)

master.xml配置如下(示例):

<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <include file="classpath:liquibase/init/init_table.xml" relativeToChangelogFile="false"/>
    <include file="classpath:liquibase/v1.0/user.xml" relativeToChangelogFile="false"/>

</databaseChangeLog>

生成初始数据文件init_table.xml方式如下:
引入maven插件

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.2</version>
    <configuration>
        <changeLogFile>${basedir}/src/main/resources/liquibase/init/init_table.xml</changeLogFile>
        <!--changelog文件生成位置-->
        <outputChangeLogFile>${basedir}/src/main/resources/liquibase/init/init_table.xml</outputChangeLogFile>
        <!--数据库连接-->
        <driver>com.mysql.jdbc.Driver</driver>
        <url>jdbc:mysql://192.168.40.129:13306/wework-chat-db</url>
        <username>root</username>
        <password>123456</password>
        <!--输出文件编码-->
        <outputFileEncoding>UTF-8</outputFileEncoding>
        <!--执行的时候是否显示详细的参数信息-->
        <verbose>true</verbose>
        <!--连接非本地数据库是否弹出提示框-->
        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
        <!--生成changelog文件内容-->
        <diffTypes>tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data</diffTypes>
    </configuration>
</plugin>

点击生成初始化文件
在这里插入图片描述
查看生成的init_table.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <changeSet author="Administrator (generated)" id="1699021847622-1">
        <createTable tableName="t_corp_config">
            <column name="corp_id" remarks="设置企业微信的corpId" type="VARCHAR(32)">
                <constraints nullable="false"/>
            </column>
            <column name="corp_name" remarks="设置企业名称" type="VARCHAR(50)">
                <constraints nullable="false"/>
            </column>
            <column name="agent_id" remarks="设置企业微信应用的AgentId" type="INT"/>
            <column name="secret" remarks="设置企业微信应用的Secret" type="VARCHAR(100)"/>
            <column name="token" remarks="设置企业微信应用的token" type="VARCHAR(100)"/>
            <column name="aes_key" remarks="设置企业微信应用的EncodingAESKey" type="VARCHAR(100)"/>
        </createTable>
    </changeSet>
    <changeSet author="Administrator (generated)" id="1699021847622-2">
        <addPrimaryKey columnNames="corp_id" constraintName="PRIMARY" tableName="t_corp_config"/>
    </changeSet>
</databaseChangeLog>

后续有新的sql脚本就添加到master.xml,比如v1.0/user.xml


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了Liquibase的使用,希望对你有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1168720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用pandas处理excel文件【Demo】

一、代码示例 import pandas as pd from pandas import Series,DataFrame from pandasql import sqldf import matplotlib.pyplotidInfos DataFrame(pd.read_excel(home_data.xlsx))print(idInfos.head(2))print(idInfos.dtypes)# print(idInfos[:][姓名]) # 自定义一个函数s…

QTreeView 常见节点操作

目录 1、节点遍历 2、设置当前选中项 3、树节点数据绑定 4、树节点自定义样式 5、数据检索 6、获取当前选中项 QTreeView作为项目最经常使用的空间&#xff0c;常用接口和操作必须熟悉熟悉在熟悉&#xff01;&#xff01;&#xff01; 1、节点遍历 void ParamSettingDl…

【python VS vba】(3) 在python直接调用vba脚本

目录 0 前言 1 VBA 内容 1.1 EXCEL这边VBA的内容 1.2 VBA的测试代码 2 python 调用 2.1 python 调用VBA的过程和结果 2.2 代码 0 前言 前面写了这么多&#xff0c;没想到&#xff0c;其实py是可以直接支持VBA的 python的模块import xlwings&#xff0c;可以让python直…

Leetcode1128. 等价多米诺骨牌对的数量

Every day a Leetcode 题目来源&#xff1a;1128. 等价多米诺骨牌对的数量 解法1&#xff1a;暴力 代码&#xff1a; class Solution { public:int numEquivDominoPairs(vector<vector<int>> &dominoes){int n dominoes.size(), count 0;for (int i 0;…

理解训练深度前馈神经网络的难度【PMLR 2010】

论文地址&#xff1a;Excellent-Paper-For-Daily-Reading/summarize at main 类别&#xff1a;综述 时间&#xff1a;2023/11/03 摘要 这篇论文比较久了&#xff0c;但仍能从里面获得一些收获&#xff0c;论文主要是讨论并研究了不同的非线性激活函数的影响&#xff0c;sig…

Java与Redis的集成以及Redis中的项目应用

一、Java连接Redis Redis与MySQL都是数据库&#xff0c;java操作redis其实跟操作mysql的过程是一样的。 1.1 导入依赖 打开IDEA&#xff0c;进入Java项目&#xff0c;导入pom依赖&#xff0c;代码如下&#xff1a; <dependency><groupId>redis.clients</gro…

threejs 2. 辅助对象

ArrowHelper 箭头 const arrowHelper new THREE.ArrowHelper(new THREE.Vector3( 1, 2, 0 ).normalize(), // 方向向量必须是单位向量,默认值为(0,0,1)new THREE.Vector3( 0, 0, 0 ), // 起点,默认值为(0,0,0)1, // 长度,默认值为10xffff00, // 颜色,默认值为0xffff00undefine…

JavaSE基础 --- 类与对象

1.类与对象的定义 类是一种抽象的数据类型&#xff0c;它描述了一类对象的行为和状态。例如&#xff0c;我们可以定义一个名为“Dog”的类&#xff0c;它描述了狗这类动物的一般特性&#xff0c;如颜色、品种等状态&#xff0c;以及跑、叫等行为。 对象则是类的实例&#xff0c…

【金TECH频道】企业架构转型组合拳来袭,助力金融机构一臂之力

当前&#xff0c;数字化转型已经成为时代共性课题 在政策和技术的双重指引下 金融机构逐渐走向差异化竞争的格局 面对转型阵痛 以契合、明晰的战略规划及 企业架构调整来辅助业务变革 成为助力企业数字化转型的有效路径 金融机构也纷纷开始探索 企业架构转型的新思路、…

SQL Server2000mdf升级SQL Server2005数据库还原

SQL Server2000数据库还原sqlserver 2000mdf升级 sqlserver 2008数据库还原SQL Server2005数据库脚本 sqlserver数据库低版本升级成高版本 sqlserver数据库版本升级 数据库版本还原 如果本机安装了sqlserver2012或者sqlserver2019等高版本 怎么样才能运行sqlserver2000的数据库…

2003-2022年地级市-财政收支明细数据(企业、个人所得税、科学、教育、医疗等)

2003-2022年地级市-财政收支明细数据&#xff08;企业、个人所得税、科学、教育、医疗等&#xff09; 1、时间&#xff1a;2003-2022年 2、指标&#xff1a;行政区划代码、年份、地区、一般公共预算收入、一般公共预算-税收收入、一般公共预算-税收收入-增值税收入、一般公共…

软件测试面试题及答案2024

1、你们的缺陷等级如何划分的&#xff1f;☆☆☆☆☆ 我们的缺陷一般分为四个等级&#xff0c;致命级&#xff0c;严重级&#xff0c;一般级和轻微级。致命级指能够导致软件程序无法使用的缺陷&#xff0c;比如宕机&#xff0c;崩溃&#xff0c;手机APP的闪退&#xff0c;数据…

【AUTOSAR CANTP】深入理解CAN传输层:N-SDU数据接收与缓冲处理

1. 前言 CanTp是PDU路由器和CAN接口模块之间的那个模块。它的主要作用就是对超过8字节或者CAN FD情况下超过64字节的CAN I-PDU进行分段和重组啦。PDU路由器会把AUTOSAR COM和DCM I-PDU放到不同的通信协议上去,具体是用哪个网络系统类型(比如CAN、LIN和FlexRay)来路由,就看…

python图像处理 ——几种图像增强技术

图像处理 ——几种图像增强技术 前言一、几种图像增强技术1.直方图均衡化2.直方图适应均衡化3.灰度变换4.同态滤波5.对比拉伸6.对数变换7.幂律变换&#xff08;伽马变换&#xff09; 前言 图像增强是指通过各种算法和技术&#xff0c;改善或提高数字图像的质量、清晰度、对比度…

半阵法单脉冲测角

半阵法单脉冲测角 单脉冲测角的类型确知波束形成导向矢量半阵测向原理半阵测向仿真 单脉冲测角的类型 传统的单脉冲测向方法主要有3种&#xff0c;分别是半阵法、加权法和和差比幅法。在了解单脉冲测向之前&#xff0c;首先要知道确知波束形成&#xff0c;确知波束形成就是设计…

python GUI tkinter实战

筛选出列长度不为指定长度的列 from os import path from tkinter import (BOTH, BROWSE, EXTENDED, INSERT, Button, Frame, Label,Text, Tk, filedialog, mainloop, messagebox) import matplotlib.pyplot as plt import pandas as pd from PIL import Image, ImageTk from …

P3398 仓鼠找 sugar

Portal. LCA。 询问树上两条路径是否有交点。 画图发现无非两种情况&#xff1a; 发现一条路径的起点和终点的 LCA 经过另一条路径&#xff0c;是两路径相交的充要条件。 考虑如何判断这个 LCA 在不在路径上。若 d ( s , LCA ) d ( LCA , t ) d ( s , t ) d(s,\text{LCA…

ArmSom---SPI开发指南

1. 简介 RK3588从入门到精通本⽂主要介绍在Rockchip平台配置spi接口并且使用的方法开发板&#xff1a;ArmSoM-W3Kernel&#xff1a;5.10.160OS&#xff1a;Debian11 2. SPI接口概述 SPI&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;即串行外围设备接口&…

2023年辽宁省数学建模竞赛B题思路详细分析

摘要略&#xff0c;2023年辽宁省数学建模竞赛B题代码和论文已经完成&#xff0c;代码为全部3问代码&#xff0c;论文包括摘要、问题重述、问题分享、模型假设、符号说明、模型的建立和求解&#xff08;问题1无监督聚类模型的建立和求解&#xff0c;问题二有监督分类预测模型的建…

基础课18——智能客服系统架构

1.基础设施层 基础设施主要包括以下几点&#xff1a; 1. 硬件设施&#xff1a;包括服务器、存储设备、网络设备等&#xff0c;这是整个系统运行的物理基础。 2. 软件设施&#xff1a;包括操作系统、数据库管理系统、自然语言处理(NLP)工具和机器学习算法等&#xff0c;这些是…