zoukankan      html  css  js  c++  java
  • 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
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/YC-L/p/14291077.html
Copyright © 2011-2022 走看看