SpringBoot集成liquibase

发布时间 2023-08-23 17:19:18作者: 鹿鹿的布丁

Liquibase 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 XML 文件中,便于版本控制。

前置准备

  • 创建一个SpringBoot项目
  • 开发环境
    • Spring Boot-2.7.14�
    • Java(jdk8)
    • Mysql-8.0.27

开始集成

引入坐标

  • mysql-connector存在两个版本:com.mysql.mysql-connector-jmysql.mysql-connector-java�具体是哪个,可以根据spring-boot-dependencies-2.7.14.pom中的定义
  • liquibase的LiquibaseAutoConfiguration�配置,是必须要有数据库连接的,所以引入mybatis-plus。也可以引入其他的,例如:jpa
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.14</version>
  </parent>

  <groupId>com.tzcxyh</groupId>
  <artifactId>lulu</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>lulu</name>
  <description>lulu</description>

  <properties>
    <java.version>1.8</java.version>
    <mybatis-plus.version>3.5.0</mybatis-plus.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- lombook依赖 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

    <!--mysql-->
    <!--spring-boot-dependencies中已经指定版本-->
    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
    </dependency>

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

    <!-- Mybatis-Plus Start -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>${mybatis-plus.version}</version>
    </dependency>
    <!-- Mybatis-Plus End -->

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

</project>

新建一个数据

image.png

在application.properties中添加配置

#liquibase的启始master.xml配置
spring.liquibase.change-log=classpath:liquibase/master.xml

# mysql 8.x
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
spring.datasource.url: jdbc:mysql://127.0.0.1:3306/lulu-auth?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
spring.datasource.username: root
spring.datasource.password: 123456

配置liquibase的xml

resources文件夹下面新建liquibase/master.xml。用于管理执行的数据库操作集合

<databaseChangeLog
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
    <!-- 指定执行的文件 -->
    <include file="liquibase/selfChangeLog.xml"/>
</databaseChangeLog>

启动项目,观察数据库变化

  • 在数据库中新建了两个表DATABASECHANGELOGDATABASECHANGELOGLOCK

image.png

  • DATABASECHANGELOG中记录了以<changeSet>为单位的日志,并记录了MD5防止修改

image.png