Idea Spring-boot maven下使用liquibase

 官方文档

 https://docs.liquibase.com/tools-integrations/maven/home.html

 通过liquibase使用mysql

 https://docs.liquibase.com/workflows/database-setup-tutorials/mysql.html?Highlight=mysql  首先在pom.xml中引入liquibase的依赖
<dependency>
     <groupId>org.liquibase</groupId>
     <artifactId>liquibase-core</artifactId>
</dependency>
 在resources目录下新建一个文件 liquibase.properties
--driver=com.mysql.cj.jdbc.Driver
--classpath=mysql-connector-java-8.0.22.jar
--url="jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:60991/lianmai?autoReconnect=true&useSSL=FALSE" 
--changeLogFile=db.changelog-1.0.xml
--username=*****--password=*****
 在此之前,我们需要先引入mysql连接器,注册mysql驱动  打开project structure,由于我这个项目已经在 pom.xml 文件中注入了mysql-connector的依赖,library和modules已经自动下载  引入mysql连接器  注册mysql驱动    liquibase.properties的配置类比如下
driver=com.mysql.cj.jdbc.Driver
classpath=mysql-connector-java-8.0.22.jar
url=jdbc:mysql://bj-cdb-nivnaury.sql.tencentcdb.com:*/lianmai?autoReconnect=true&useSSL=FALSE
changeLogFile=src/main/resources/db/changelog/dbChangeLog.xml
outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml
username=*
password=*
 如果我们在一个已经有数据库和数据表的项目上使用 liquibase 数据迁移工具,那么可以通过changelog命令生成现有数据库快照

 生成changelog命令

 https://docs.liquibase.com/commands/community/generatechangelog.html?Highlight=generateChangeLog

 踩坑过程

 首先要配置propertyFile属性,下面是我的目录结构以及propertyFile的属性配置  
<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <configuration>
        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
    </configuration>
</plugin>
   然后需要在liquibase.properties中配置outputChangeLogFile属性  我们通过 execute maven goal 来执行 liquibase指令    点击上图图标后回车执行    刚开始url这块,冒号没有去掉,执行 mvn liquibase:generateChangeLog 指令出现了以下这种错误      国外有个老哥犯了同样的错误,https://stackoverflow.com/questions/49053509/ms-sql-liquibase-connection-could-not-be-created  然后outputChangeLogFile文件位置配置错误,执行指令出现了下面这种报错    然后修改文件路径,需要注意这个路径是从src开始的,不是从properties的当前目录开始的  正确的配置应该是
outputChangeLogFile=src/main/resources/db/changelog/outputChangeLog.xml
 命令执行成功之后,会出现以下图像    然后弹框确认是否继续执行    最后文件中的结果如下所示    下图是数据库中的Persons表    如果我们要去修改这个数据库就需要用到changeLogFile

 通过liquibase update命令使用changeLogFile文件更新数据库

 修改changeLog的路径      然后可以在changelog中建表 
  •  将changeset添加到变更日志。
  •  changeset由author和id属性唯一标识。
  •  Liquibase尝试执行事务中在最后提交的每个changeset。
 在dbchangelog.xml文件文件中,添加一个新的部门创建表变更集,如下所示
<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>
 生成的sql语句如下
CREATE TABLE "department"
("id" number (*,0),
"name" VARCHAR2 (50 BYTE),
"active" NUMBER (1, 0) DEFAULT 1
 );
 执行 mvn liquidbase:update 指令    我们去数据库看一下 create table    至此,更新数据库功能完好

 DatabaseChangeLog 和 DatabaseChangeLogLock

   我们show一下table DatabaseChangeLog    select一下,会发现这个表记录的是每次update的变更集以及用户和时间等相关信息,用来更新和回滚     再show一下table DatabaseChangeLogLock    看下官网  Liquibase使用DATABASECHANGELOGLOCK表来确保一次只运行一个Liquibase实例。

 因为Liquibase只是从DATABASECHANGELOG表中读取数据以确定需要运行哪些变更集

 所以如果对同一个数据库同时执行多个Liquibase实例,则会发生冲突。

 如果多个开发人员使用同一个数据库实例,或者集群中有多个服务器在启动时自动运行Liquibase,则可能发生这种情况。

 所以这个表是用来锁数据库的,避免多个开发人员同一时刻操作数据库的时候造成冲突  下图是四个字段的用途     id和locked好理解,lockgranted指的是锁库日期,lockedby指的是被谁锁定

 回滚 maven Rollback

 官方地址 https://docs.liquibase.com/tools-integrations/maven/commands/maven-rollback.html?Highlight=rollback  三种回滚模式
  • liquibase.rollbackCount - 按顺序还原指定数量的变更集,从最新的变更开始,向后操作,直到达到指定的值
  • liquibase.rollbackTag -    还原被标记的数据库所做的所有更改
  • liquibase.rollbackDate -  恢复数据库所做的所有更改到指定的日期和时间
 指定变更集的数量的回滚
mvn liquibase:rollback -Dliquibase.rollbackCount=3
 被标记的变更集的回滚,update之前要打tag
mvn liquibase:rollback -Dliquibase.rollbackTag=version1
 在dbChangeLog.xml文件中打tag
<liquibase.tag>v3.2.1</liquibase.tag>
<liquibase.rollbackTag>${liquibase.tag}</liquibase.rollbackTag>
 指定日期的变更集回滚
mvn liquibase:rollback -Dliquibase.rollbackDate=2020-11-26
论读书
睁开眼,书在面前
闭上眼,书在心里
原文地址:https://www.cnblogs.com/YC-L/p/14291077.html