当前位置: 首页 > article >正文

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

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=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 10
  liquibase:
    change-log: classpath:liquibase/platform/changeSet.xml
    enabled: true

创建 Liquibase 变更集文件

<?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.1.xsd">

    <include file="liquibase/platform/change/change01.xml"/>
</databaseChangeLog>

具体的变更集文件

<?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.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.kler.cn/a/447401.html

相关文章:

  • PHP MySQL 插入多条数据
  • 【Java】递归算法
  • 让汉语和英语一样长的字符编码
  • lpips使用笔记
  • 「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
  • STM32 高级 物联网通信之CAN通讯
  • 使用 mstsc 远程桌面连接时无法复制粘贴本地文件或文字解决方法
  • SAP PP ECN CSAP_MAT_BOM_MAINTAIN
  • run postinstall error, please remove node_modules before retry!
  • PyTorch实战-模拟线性函数和非线性函数
  • 基于matlab的单目相机标定
  • C语言 文件操作——按字符读写文件
  • uni-app开发商品分类页面实现
  • 奇怪问题| Chrome 访问csdn 创作中心的时候报错: 服务超时,请稍后重试
  • IIoT赋能绿色智造:2025制造业的可持续发展之路
  • 主要是使用#includenlohmannjson.hpp时显示找不到文件,但是我文件已正确导入visual studio配置,也保证文件正确存在
  • .NET重点
  • 标准模板库(STL)中的一个容器 都有什么
  • ARM学习(38)多进程多线程之间的通信方式
  • 工业摄像机基于电荷耦合器件的相机
  • 三格电子——新品IE103转ModbusTCP网关
  • C++ OCR银行卡文字识别
  • 【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
  • vue-flow流程图组件
  • 基于SpringBoot的“旅游管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 模型数据算法概论