【项目组件】liquibase管理项目数据库

liquibase介绍

liquibase官网

liquibase是一款用于数据库管理重构以及迁移的一款开源工具。
他通过文件记录对数据库的修改,将数据库更新或者会滚到对应的状态。
liquibase目前支持目前大部分主流的数据库,例如mysql、MySQL, PostgreSQL, Oracle, Sql Server, DB2等等。

为什么会选择liquibase:

1、统一记录数据库的变更
在项目开发的过程中,经常会因为需求的变更导致已经设计好的数据库表需要添加字段。如果不将这些字段统一维护起来,那么当项目部署到其他环境时有可能会引发项目部署失败。
2、liquibase的记录文件可以被git管理。
这样就可以支持多人进行维护。
3、丰富的日志文件格式。
支持如XML, YAML, JSON, SQL多种记录的文件格式
4、支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等;

引入liquibase

因为我们的项目是maven项目所以只介绍maven项目引入liquibase

引入liquibase的maven坐标

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

一般我们在项目开发前会先进行数据库的设计,那么已经创建好的数据如果用liquibase管理呢?
我们可以使用liquibase的maven插件,对已经创建好的数据库进行逆向生成change-log(liquibase 记录数据库变更的文件,一般为xml格式)

设置liquibase 的maven插件

我们可以根据此模板来配置liquibase的插件配置文件

<plugin>
     <groupId>org.liquibase</groupId>
      <artifactId>liquibase-maven-plugin</artifactId>
      <version>3.4.2</version>
      <configuration>
          <changeLogFile>${basedir}/src/main/resources/liquibase/authentication/changelog.xml</changeLogFile>
          <!--changelog文件生成位置-->
          <outputChangeLogFile>${basedir}/src/main/resources/liquibase/authentication/changelog.xml</outputChangeLogFile>
          <!--数据库连接-->
          <driver>com.mysql.jdbc.Driver</driver>
          <url>jdbc:mysql://127.0.0.1:3306/test</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>

配置好maven插件之后,我们就会在maven的插件列表里看到liquibase的插件,如下图:
在这里插入图片描述

逆向生成现有数据库的change-log文件

双击运行此功能,按照我们的设置逆向生成changelog文件
在这里插入图片描述
生成结果:
在这里插入图片描述
下面是生成的文件的格式,我们稍后再做解读
在这里插入图片描述

配置liquibase

创建matser文件,创建master文件的目的,是为了更好的维护所有的changelog文件

<?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.8.xsd">
    <!--此处引入我们刚才逆向生成的changelog文件,如果数据发生变更,产生的changelog文件都需要引入到master文件中-->
    <include file="/authentication/changelog.xml" relativeToChangelogFile="true" />
</databaseChangeLog>

我们引入liquibase后,需要在项目的配置文件中对liquibase进行配置,liquibase会将对master文件中include的changelog文件进行管理

spring:
  liquibase:
    change-log: classpath:/liquibase/master.xml #

使用changelog创建数据库

当我们配置好liquibase后,启动项目就会按照我们配置的changelog文件生成制定的数据库表(注意,如果数据中该表已经存在的话,启动可能会报“数据库已经存在”的错,我们可以将数据库表删除,在启动项目即可)

项目启动后,会重新创建此数据库表,并且还会在数据库中生成两张表。
在这里插入图片描述
其中‘DATABASECHANGELOG‘此表中记录,changelog的执行记录
在这里插入图片描述

‘DATABASECHANGELOGLOCK’ 此表是一个锁,当有changelog执行的时候,会获取这个锁,其他线程的changelog是需要等到当前changelog执行完毕释放锁后再执行。保证了线程安全性。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LLLDa_&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值