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 删除数据库表(慎用!)

liquibase应用相关推荐

  1. java程序中日志jar包的使用_java – 如何使用jar文件中的Liquibase changelog

    我目前在我的application.properties中有以下内容: liquibase.change日志=类路径:/db/changelog/db.changelog-master.xml 该文件 ...

  2. mysql duplicate jpa_SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码

    spring: # 数据库配置 datasource: primary: jdbc-url: jdbc:mysql://localhost:3306/mes-dev?useUnicode=true&a ...

  3. springboot整合liquibase入门实例

    1,新建springboot工程时选中mysql和liquibase,这样就不用在pom中添加dependence了 2,项目目录结构 3.pom文件依赖,依赖 spring-boot-starter ...

  4. Spring Boot 简单集成 Liquibase

    Liquibase 是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在 changelog文件中,便于版本控制,它的目标是提供一种数据库类型无关 ...

  5. [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習

    透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...

  6. 报错, liquibase.exception.ValidationFailedException: Validation Failed

    问题: 2020-11-12 15:15:14.082 WARN 15972 --- [ main] ConfigServletWebServerApplicationContext : Except ...

  7. Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较

    前言 当您需要使用Java创建Web应用程序或API时,可以使用RESTful,SOAP或GraphQL.无论您是查看同步HTTP,异步还是反应式,队列中的消息或来自Kafka的事件,都很难超越Spr ...

  8. liquibase mysql_Liquibase MySQL:语法错误附近'????????????????'

    我正尝试使用以下参数运行liquibase(默认参数,仅修改路径): liquibase --driver=com.mysql.jdbc.Driver \ --classpath=mysql-conn ...

  9. jhipster使用liquibase修改一个表的一个字段

    1.首先编辑changelog目录下的.xml文件 <?xml version="1.0" encoding="utf-8"?> <datab ...

  10. Liquibase常用操作

    概述 Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案, ...

最新文章

  1. 深度学习不是万灵药!神经网络3D重建只是图像分类
  2. 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问
  3. Opencv卷积滤波cvFilter2D-高通与低通
  4. 短线王的盯盘宝怎么样_2022考研英语韦林全程班怎么样?资源分享
  5. onclick 调用php,AJAX调用PHP简单应用
  6. Java终于可以加入字符串
  7. 前端学习(2682):重读vue电商网站2之前台启动
  8. js 循环拆词_javascript forEach通用循环遍历方法
  9. php 代码 自动检查工具下载,PHP_CodeSniffer安装和使用教程(自动代码检查规范工具)...
  10. android Binder机制(一)架构设计
  11. Linux的守护进程
  12. 技能大赛 计算机 融合 研究,技能大赛与高职计算机教学的融合研究.doc
  13. Mysql学习第二课 tar、lvm、mysqldump全备份
  14. 小程序学习笔记(7)-使用小程序的组件构建UI界面
  15. 电脑桌面双击计算机图标打不开,电脑双击图标打不开怎么办
  16. gre作文3.5什么水平计算机专业,gre作文3.5分如何达到
  17. PS实战-涂抹掉原图上的文字
  18. OI模板 卢卡斯定理
  19. js算法数组flat展平的几种方法
  20. 离线安装Python软件包的方法

热门文章

  1. Spring AOP代码实现:实例演示与注解全解
  2. Python GUI之tkinter(一)
  3. 过山车java_航电java2063过山车
  4. foreach循环遍历
  5. 网络安全——信息收集与社工技巧拓扑图
  6. ArcGIS几种数据格式(ZZ)
  7. 手机之后 云计算与人工智能将锻造新的计算平台
  8. 【2022最新Java面试宝典】—— Java异常面试题(33道含答案)
  9. UITableViewCell使用cell和cell.contentView的区别
  10. PyTorch - error executing torch_shm_manager