• 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
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    计算机组成原理小结
    selenium基本操作
    selenium实现网易邮箱的登录注册
    如何安装selenium框架
    2020年目标
    个人对软件测试的认识
    java b2b2c电商系统javashop7.2发布
    基于脚本引擎的运费架构分享
    模拟支付宝微信回调
    Javashop电商系统7.2发布
  • 原文地址:https://www.cnblogs.com/YC-L/p/14291077.html
Copyright © 2020-2023  润新知