【项目组件】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的插件配置文件


     org.liquibase
      liquibase-maven-plugin
      3.4.2
      
          ${basedir}/src/main/resources/liquibase/authentication/changelog.xml
          
          ${basedir}/src/main/resources/liquibase/authentication/changelog.xml
          
          com.mysql.jdbc.Driver
          jdbc:mysql://127.0.0.1:3306/test
          root
          123456
          
          UTF-8
          
          true
          
          false
          
          tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data
      
   

配置好maven插件之后,我们就会在maven的插件列表里看到liquibase的插件,如下图:
【项目组件】liquibase管理项目数据库_第1张图片

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

双击运行此功能,按照我们的设置逆向生成changelog文件
【项目组件】liquibase管理项目数据库_第2张图片
生成结果:
【项目组件】liquibase管理项目数据库_第3张图片
下面是生成的文件的格式,我们稍后再做解读
【项目组件】liquibase管理项目数据库_第4张图片

配置liquibase

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


<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">
    
    <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执行完毕释放锁后再执行。保证了线程安全性。

你可能感兴趣的:(项目组件,java,后端,数据库开发)