liquibase应用

liquibase常见操作

1. 概述

Liquibase 是一个用于跟踪,管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据) 都保存在XML文件中,便于版本控制。

本文主要介绍通过Maven Plugin的方式使用liquibase导入导出脚本。

2. 使用

官方提供的文档 可以看出,liquibase提供了多种使用方式,例如Ant,CommandLine,Maven Plugin等等。下面将挑选比较常用的来进行说明,方便读者快速入门。

3.Maven Plugin

1.引入Maven Plugin

官方文档:https://docs.liquibase.com/tools-integrations/maven/maven-pom-file.html

在pom.xml文件中添加

    <!-- Maven hierarchy of elements for your project -->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <!--start with basic information to get Liquibase plugin:
                    include <groupId>, <artifactID>, and <version> elements-->
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>4.6.1</version>
<!--                    <version>4.2.0</version>-->
<!--                    <version>3.2.0</version>-->
                    <configuration>
                        <!--properties文件路径,该文件记录了数据库连接信息等-->
                        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                        <propertyFileWillOverride>true</propertyFileWillOverride>
                        <!--生成文件的路径-->
                        <outputChangeLogFile>src/main/resources/liquibase/changelog_dev.xml</outputChangeLogFile>
                      <!--也可在这里配置-->
                     <!-- <driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</url>                    
                    <username>root</username>
                    <password>egova</password>-->
                    </configuration>
                    <dependencies>
                        <!--set up any dependencies for Liquibase to function in your environment for example, a database-specific plugin-->
                        <dependency>
                            <groupId>com.h2database</groupId>
                            <artifactId>h2</artifactId>
                            <version>1.4.199</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

2.最好导入数据库驱动jar包依赖,我用的本地jar包老是找不到,根据自己的需要替换jar包版本。

    <dependencies>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0.1.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
    </dependencies>

3.添加liquibase.properties文件。

#liquibase
changeLogFile=src/main/resources/liquibase/db.changelog-master.xml
##.username     数据库用户名
#username=wtong
#
##.password     数据库密码
#password=wtong
#
##.url          数据库URL连接
#url=jdbc:oracle:thin:@localhost:1521:test
#
##.driverjar    数据库驱动jar名
#classpath=ojdbc7-12.1.0.1.0.jar
#
##.driver       数据库驱动类名
#driver=oracle.jdbc.driver.OracleDriver


############----------------mysql
#.username     数据库用户名
username=root

#.password     数据库密码
password=root

#.url          数据库URL连接
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf8&useSSL=false&useUnicode=true

#.driverjar    数据库驱动jar名
classpath=mysql-connector-java-5.1.44.jar

#.driver       数据库驱动类名
driver=com.mysql.jdbc.Driver

4.新建changelog文件入口: db.changelog-master.xml

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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="src/main/resources/liquibase/changelog_dev.xml"/>
</databaseChangeLog>

5.使用mvn命令

(1)对当前数据库状态生成 changlog:

mvn liquibase:generateChangeLog

(2)只对数据生成 changelog (先用别的方式往数据库创建数据后再用此方式生成changelog):
mvn liquibase:generateChangeLog -Dliquibase.diffTypes=data
区别:前者是生成数据库中表结构,后者没有。

这样的话就会在pom文件配置的输出位置生成changlog文件。

(3)将changelog变化的内容写入数据库:

mvn liquibase:update

(4)检查changelog语法的合法性

mvn liquibase:updateSQL
在这里插入图片描述

6.在项目中使用liquibase

@Bean
public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) {
 
        SpringLiquibase liquibase = new SpringLiquibase(taskExecutor, env);
        liquibase.setDataSource(dataSource);
        //制定changelog的位置,这里使用的一个master文件引用其他文件的方式
        liquibase.setChangeLog("classpath:config/liquibase/db.changelog-master.xml");
        liquibase.setContexts(liquibaseProperties.getContexts());
        liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema());
        liquibase.setDropFirst(liquibaseProperties.isDropFirst());
        return liquibase;
}

7.liquibase命令大全

命令名称命令描述
update更新数据库到当前版本
updateSQL写入SQL将数据库更新到currentversion或STDOUT
updateCount 将下一个NUM更改应用到数据库
updateCountSQL 写入SQL以将下一个NUM更改应用到数据库
updateToTag 使用指定的标记将数据库更新到变更集
updateToTagSQL 使用指定的标记将SQL写入(到标准输出)到更改集
rollback 将数据库回滚到指定标签的状态is was
rollbackSQL 生成数据库回滚到指定标签的sql
rollbackToDate <date/time>将数据库回滚到给定日期/时间的状态is was。日期格式:yyyy-MM-dd 'HH: mm: ss
rollbackToDateSQL <date/time>写入SQL以将数据库回滚到给定日期/时间版本的状态到STDOUT
rollbackCount 回滚应用于数据库的最后一个<值>更改集
rollbackCountSQL 写入SQL以回滚最后一个<值>更改集到应用于数据库的stdoutapply
futureRollbackSQL写入SQL,以便在更改日志中的更改完成后将数据库回滚到当前状态
futureRollbackSQL 在更改日志中的<值>更改完成后,写入SQL以将数据库回滚到当前状态
futureRollbackFromTagSQL 写入(到标准输出)SQL,以便在更改后将数据库回滚到其当前状态
updateTestingRollback更新数据库,然后再次回滚更改。用于测试回滚支持
generateChangeLog写入更改日志XML以将数据库的当前状态复制到标准输出
snapshot将数据库的当前状态写入标准输出
snapshotReference将referenceUrl数据库的当前状态写入标准输出
Diff Commands数据库对比命令
diff [diff parameters]数据库对比命令
diffChangeLog [diff parameters]数据库对比日志
Documentation Commands文档命令
dbDoc 基于当前数据库和更改日志生成类似javadoc的文档
Maintenance Commands维护命令
tag 给当前的数据库打标签,方便日后回滚
tagExists 检查对应的标签是否存在
status [–verbose]输出为执行changeset的行数
unexpectedChangeSets[–verbose]输出本地不存在changeset 行数
validate检查是否有错误的changelog
calculateCheckSum 检查指定changeset id 的checksum值 格式为 filepath::id::author
clearCheckSums从数据库日志中删除所有保存的校验和
changelogSync标记所有的更改已执行
changelogSyncSQL生成标记更改已执行的sql并输出到标准输出
markNextChangeSetRan将下一个变更标记为已执行
markNextChangeSetRanSQL生成将下一个变更标记为已执行的sql并输出到标准输出
listLocks列出liquibase数据库锁
releaseLocks释放所有的liquibase数据库锁
dropAll删除数据库表(慎用!)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供关于Liquibase的教程。Liquibase是一个用于数据库版本控制的开源工具,它可以帮助您管理数据库模式和数据的变更。 以下是Liquibase教程的一些主要步骤: 1. 安装Liquibase:首先,您需要下载并安装Liquibase。您可以从Liquibase官方网站(https://www.liquibase.org/)下载最新的稳定版本。 2. 配置数据库:在开始使用Liquibase之前,您需要配置您的数据库连接。您可以在Liquibase的配置文件(通常是一个XML文件)中指定数据库的连接URL、用户名和密码等信息。 3. 创建数据库变更脚本:Liquibase使用变更脚本来跟踪数据库的变化。您可以通过编写包含DDL(数据定义语言)和DML(数据操作语言)语句的XML、YAML或SQL文件来定义这些变更。每个变更脚本都有一个唯一的标识符,以便Liquibase可以跟踪和应用它们的顺序。 4. 运行Liquibase命令:一旦您创建了数据库变更脚本,您可以使用Liquibase命令行工具来执行这些变更。例如,您可以使用"liquibase update"命令来应用尚未应用的变更。 5. 版本控制:Liquibase允许您对数据库模式和数据进行版本控制。您可以使用"Liquibase update"命令来将数据库更新到特定版本。此外,Liquibase还提供了回滚和验证等功能,以便您可以管理和维护数据库的变化历史记录。 这只是Liquibase教程的一个简单概述,您可以在Liquibase官方文档中找到更详细的信息和示例。祝您使用Liquibase愉快!如果您有任何进一步的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值