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&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应用相关推荐
- java程序中日志jar包的使用_java – 如何使用jar文件中的Liquibase changelog
我目前在我的application.properties中有以下内容: liquibase.change日志=类路径:/db/changelog/db.changelog-master.xml 该文件 ...
- mysql duplicate jpa_SpringBoot Jpa 双数据源mysql + oracle + liquibase+参考源码
spring: # 数据库配置 datasource: primary: jdbc-url: jdbc:mysql://localhost:3306/mes-dev?useUnicode=true&a ...
- springboot整合liquibase入门实例
1,新建springboot工程时选中mysql和liquibase,这样就不用在pom中添加dependence了 2,项目目录结构 3.pom文件依赖,依赖 spring-boot-starter ...
- Spring Boot 简单集成 Liquibase
Liquibase 是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在 changelog文件中,便于版本控制,它的目标是提供一种数据库类型无关 ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- 报错, liquibase.exception.ValidationFailedException: Validation Failed
问题: 2020-11-12 15:15:14.082 WARN 15972 --- [ main] ConfigServletWebServerApplicationContext : Except ...
- Spring Boot学习总结(27)—— Spring Boot中两个数据库迁移工具Liquibase和Flyway的比较
前言 当您需要使用Java创建Web应用程序或API时,可以使用RESTful,SOAP或GraphQL.无论您是查看同步HTTP,异步还是反应式,队列中的消息或来自Kafka的事件,都很难超越Spr ...
- liquibase mysql_Liquibase MySQL:语法错误附近'????????????????'
我正尝试使用以下参数运行liquibase(默认参数,仅修改路径): liquibase --driver=com.mysql.jdbc.Driver \ --classpath=mysql-conn ...
- jhipster使用liquibase修改一个表的一个字段
1.首先编辑changelog目录下的.xml文件 <?xml version="1.0" encoding="utf-8"?> <datab ...
- Liquibase常用操作
概述 Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案, ...
最新文章
- 深度学习不是万灵药!神经网络3D重建只是图像分类
- 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问
- Opencv卷积滤波cvFilter2D-高通与低通
- 短线王的盯盘宝怎么样_2022考研英语韦林全程班怎么样?资源分享
- onclick 调用php,AJAX调用PHP简单应用
- Java终于可以加入字符串
- 前端学习(2682):重读vue电商网站2之前台启动
- js 循环拆词_javascript forEach通用循环遍历方法
- php 代码 自动检查工具下载,PHP_CodeSniffer安装和使用教程(自动代码检查规范工具)...
- android Binder机制(一)架构设计
- Linux的守护进程
- 技能大赛 计算机 融合 研究,技能大赛与高职计算机教学的融合研究.doc
- Mysql学习第二课 tar、lvm、mysqldump全备份
- 小程序学习笔记(7)-使用小程序的组件构建UI界面
- 电脑桌面双击计算机图标打不开,电脑双击图标打不开怎么办
- gre作文3.5什么水平计算机专业,gre作文3.5分如何达到
- PS实战-涂抹掉原图上的文字
- OI模板 卢卡斯定理
- js算法数组flat展平的几种方法
- 离线安装Python软件包的方法
热门文章
- Spring AOP代码实现:实例演示与注解全解
- Python GUI之tkinter(一)
- 过山车java_航电java2063过山车
- foreach循环遍历
- 网络安全——信息收集与社工技巧拓扑图
- ArcGIS几种数据格式(ZZ)
- 手机之后 云计算与人工智能将锻造新的计算平台
- 【2022最新Java面试宝典】—— Java异常面试题(33道含答案)
- UITableViewCell使用cell和cell.contentView的区别
- PyTorch - error executing torch_shm_manager