Liquibase结合SpringBoot使用实现数据库管理

server/2024/12/18 19:08:22/

Liquibase概述

Liquibase 是一个开源的数据库变更管理工具,用于跟踪、版本化、和管理数据库结构(如表、字段、索引等)的变更。它的目的是使数据库变更的过程更加透明、可控制、自动化,避免开发团队在多个环境中手动执行相同的数据库变更脚本。

Liquibase 支持多种数据库(MySQL、PostgreSQL、Oracle、SQL Server、H2 等),并能够通过 XML、YAML、JSON 或 SQL 文件来定义数据库变更。

主要特点

  • 版本控制:将数据库变更与代码同步管理,避免手动更改数据库结构。
  • 自动化迁移:在不同环境(开发、测试、生产等)中自动应用数据库变更。
  • 可回滚性:Liquibase 提供了回滚机制,可以回到之前的数据库版本。
  • 支持多种格式:支持 XML、YAML、JSON 等格式来描述变更。
  • 集成方便:Liquibase 可以集成到 CI/CD 流程中,或者与 Spring Boot 等框架配合使用,轻松管理数据库版本。

工作机制

Liquibase 使用一个名为 changelog 的文件来描述数据库的所有变更。这个文件记录了所有执行过的数据库变更集合(changeSets)。每个 changeSet 都有一个唯一的 ID 和作者标识,用来追踪该变更。

Liquibase 会通过 changelog 文件自动管理数据库的版本和变更。它会在每次应用变更时,通过一个 DATABASECHANGELOG 表记录哪些变更已经应用过了

与SpringBoot结合使用

由于我这边项目上使用的是xml方式,就用xml方式进行示例,其余方式的方法,大家感兴趣的可以自行前往官网查看文档。

传送门:Liquibase Documentation

引入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.9</version>  <type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId><version>4.21.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version> <!-- 或者根据需要使用适合的版本 --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version> <configuration><source>17</source> <target>17</target> </configuration></plugin></plugins></build>
</project>

配置文件

spring:datasource:url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10liquibase:change-log: classpath:liquibase/platform/changeSet.xmlenabled: true

创建 Liquibase 变更集文件

<?xml version="1.0" encoding="UTF-8"?><databaseChangeLogxmlns="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.1.xsd"><include file="liquibase/platform/change/change01.xml"/>
</databaseChangeLog>

具体的变更集文件

<?xml version="1.0" encoding="UTF-8"?><databaseChangeLogxmlns="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.1.xsd"><changeSet id="1" author="bob"><createTable tableName="department"><column name="id" type="int"><constraints primaryKey="true" nullable="false"/></column><column name="name" type="varchar(50)"><constraints nullable="false"/></column><column name="active" type="boolean" defaultValueBoolean="true"/></createTable></changeSet></databaseChangeLog>

常用命令

  • liquibase update: 应用所有未执行的数据库变更。
  • liquibase rollback: 回滚数据库到指定的 changeSet 或版本。
  • liquibase status: 查看当前数据库的变更状态。
  • liquibase generateChangeLog: 根据现有数据库生成初始的 changeLog 文件。

总结

Liquibase 是一个强大的数据库管理工具,它帮助你通过自动化管理数据库的变更、版本控制、和回滚,简化了开发中的数据库迁移工作。通过在 Spring Boot 中集成 Liquibase,可以更高效地管理数据库结构和版本,确保开发团队的协作更加流畅。在项目中,Liquibase 可以和 Git 等版本控制工具配合使用,确保数据库结构变更的透明性和可追溯性。


http://www.ppmy.cn/server/151246.html

相关文章

陕西科技大学《2024年807自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《陕西科技大学807自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

设计模式之 桥接模式 C# 范例

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象与实现解耦&#xff0c;使得两者可以独立变化。桥接模式通常适用于以下情形&#xff1a; 类的功能可以在不同的维度上变化&#xff0c;例如在图形界面开发中&#xff0c;可能有不同的…

WPF Combox使用 Text无法选择正确获取CHange后的Text

使用固定ComboxItem 无法通过 selectitem as object 来进行回去到 Content内的对香数据。那我只能这个样干&#xff1a; private void CBPaiweiLeixingSelect_Change(object sender, SelectionChangedEventArgs e){ ComboBox ThisBox sender as ComboBox;List<EDaxiaosuixi…

RabbitMQ如何构建集群?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ如何构建集群&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ如何构建集群&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;集群&#xff08;Cluster&#x…

概率论公式整理

1 概率 古典概型和几何概型 古典概型&#xff08;有限等可能&#xff09;几何概型&#xff08;无限等可能&#xff09; 条件概率 P ( A ∣ B ) P ( A B ) P ( B ) P(A|B) \frac{P(AB)}{P(B)} P(A∣B)P(B)P(AB)​ 全概率公式 P ( B ) ∑ i 1 n P ( A i ) P ( B ∣ A i ) P…

C# Visionpro 主窗体调用子窗体(自定义控件)按照行列进行显示(双击子窗体全窗口显示)

自定义控件界面及控件如下 控件列表 using Cognex.VisionPro; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst…

Flink DataStream API 编程指南

(对于Flink的开发,建议使用Java,Scala的支持未来会被移除) DataStream是什么 DataStream API得名于DataStream这个Java类,可以将它们视为可以包含重复项的不可变数据集合。该数据可以是有限的,也可以是无限的,用于处理它们的API是相同的。 DataStream在用法上和普通的…

试题转excel;word转excel;大风车excel

一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道题几乎需要一个下午的时间 关键这些事&#xff0c;枯燥无聊费眼睛&#xff0c;实在是看起来就很蠢的工作 就想着做一个工具&#xff0c;可以自动处理…