LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:

  • 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
  • 支持多开发者的协作维护;
  • 日志文件支持多种格式,如XML, YAML, JSON, SQL等;
  • 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。

更多详情介绍,可以浏览官网doc

之所以选择使用liquibase,原因其实挺尴尬的,由于我不会使用容器化技术,不会写dockfile来运行项目初始化sql脚本,就想有没有什么简单方便的形式,最后看中了liquibase,配置起来确实简单方便。

我是用命令行的形式生成changeLog,然后再集成到springboot中。官网上提供的还有基于ant、maven和服务端的使用的方式,以后再研究。

  1. 下载liquibase的安装包,解压到指定目录下;

  2. 通过generateChangeLog生成现有数据库的changeLog文件;

     liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog

generateChangeLog命令默认只会创建数据库结构的变更日志文件,如果希望创建插入数据的变更日志文件,可以使用参数diffTypes,该参数包括如下可选项:

  • tables [DEFAULT]表

  • columns [DEFAULT] 列

  • views [DEFAULT] 视图

  • primaryKeys [DEFAULT] 主键

  • indexes [DEFAULT] 索引

  • foreignKeys [DEFAULT]

  • sequences [DEFAULT]

  • data

    例如生成数据:

      liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog

我分别生成了两个changeLog文件,一个是inti-table.xml; 一个是init-data.xml。

3.项目中配置liquibase

首先在项目中添加支持:

    <dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>

通过查看源码,我们能看到默认的配置文件存放的位置:

这里我没有使用默认的配置,指定了一个自己的路径,只需要在application.properties中添加如下配置:

#liquibase
liquibase.change-log=classpath:/liquibase/master.xml --master.xml文件内容,通过inclue标签引入了两个changelog,就是之前的表结构和表数据。 <?xml version="1.0" encoding="utf-8"?>
<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.4.xsd"> <include file="classpath:liquibase/change_log/init-table.xml" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/change_log/init-data.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>

项目中的目录结构如下图所示:

到此已经位置好了,启动一下项目,控制台打印出liquibase初始化信息,这时候查看数据库,会表现数据库已经初始完毕,后面数据库如果有变动,可以再生成新的changelog文件,再次添加到项目中,达到持续集成的效果。整个项目的源代码已经托管到github上了,可以点击查看

Liquibase的简单使用的更多相关文章

  1. SpringBoot系列: 使用 flyway 管理数据库版本

      Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star ...

  2. 转:SpringBoot系列: 使用 flyway 管理数据库版本

    Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star 数 ...

  3. flyway 管理数据库版本

    Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star 数 ...

  4. Liquibase+SpringBoot的简单使用笔记!update+rollback

    该笔记记录了springboot整合liquibase之后,如何根据liquibase ChangeLogFile对数据库进行修改以及回滚操作 参考: baeldung.com JHipster 1. ...

  5. liquibase之快速入门

    第一步: 创建一个Changelog File: 这个database  Changelog file列举了数据库中所有的改变情况,该文件是以xml为基础的,下面是一个空的xml文件: <?xm ...

  6. Liquibase使用入门

    1.LiquiBase简介 LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.LiquiBase的主 ...

  7. Dropwizard简单入门

    Dropwizard:一个简洁的RESTful Web框架 Dropwizard跨越了开发库与框架的界限,旨在为Web应用所需的功能提供高性能.可靠的实现.Dropwizard将这些功能抽象为可重用的 ...

  8. Liquibase+spring 初步使用

    现在的工作的项目中用了liquibase,感觉挺爽的,可以跟踪.管理数据库的重构.这对于很多需求变更较大的项目是非常不错的,特别是互联网的项目.(虽然互联网Nosql已经非常流行,不过俺觉得传统关系型 ...

  9. springboot简单入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

随机推荐

  1. Hadoop1.x原理

    将这种单机的工作进行分拆,变成协同工作的集群,这就是分布式计算框架设计.使得计算机硬件类似于应用程序中资源池的资源,使用者无需关心资源的分配情况,从而最大化了硬件资源的使用价值.分布式计算也是如此,具 ...

  2. linux系统 initrd.img中init启动脚本分析

    概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的 ...

  3. dojo页面调试出错

    今天,我在调试dojo页面时,出现一些未定义的错误,这些错误只显示在引入的js的那一行,并没有指出是页面哪儿出问题了. 出现的问题一: neteaseTracker is not defined 出现 ...

  4. php 连接mssql

    以前用的都是mysql,今天突然想用下mssql,起先用的是sql server200. 第一种方法 打开mssql.dll拓展.然后把mssql.secure_connection = off改为o ...

  5. hi3531的i2c部分

    一.关于编译Hi3531 SDK: 之前编译SDK时编译到make uImage总出错,一是找不到.config文件,这个问题是必须先make menuconfig 然后保存.config文件. 二是 ...

  6. [Err] 1172 - Result consisted of more than one row

    1 错误描述 [Err] 1172 - Result consisted of more than one row Procedure execution failed 1172 - Result c ...

  7. USB转串口驱动代码分析

    1.USB插入时,创建设备 [plain] view plaincopy DriverObject->DriverExtension->AddDevice = USB2COM_PnPAdd ...

  8. 挖一挖不常用到而又很实用的重载-Split

    Split这个基本上所有的程序开发人员都用到,一般使用单字符和长字符串拆分字符串的较多,其实还有一个重载非常好用,那就是多种组合字符来进行拆分. 例如: "aaaaaaaaaa{@}bbbb ...

  9. linux和windows通用的路径

    String path=request.getSession().getServletContext().getRealPath("/")+"js" + Sys ...

  10. AJAX实现简单的读取文本文档内容到网页--AJAX

    效果图: Demo.html: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...