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. ajax的缺点

    平时我们大多注意的都是ajax给我们所带来的好处诸如用户体验的提升.对ajax所带来的缺陷有所忽视. 下面所阐述的ajax的缺陷都是它先天所产生的. 1.ajax干掉了back按钮,即对浏览器后退机制 ...

  2. input placeholder样式

    input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color:red; } input:-moz-plac ...

  3. GAN︱GAN 在 NLP 中的尝试、困境、经验

    GAN 自从被提出以来,就广受大家的关注,尤其是在计算机视觉领域引起了很大的反响,但是这么好的理论是否可以成功地被应用到自然语言处理(NLP)任务呢? Ian Goodfellow 博士 一年前,网友 ...

  4. 6.1 MSI/MSI-X Capability结构

    PCIe设备可以使用MSI或者MSI-X报文向处理器提交中断请求,但是对于某个具体的PCIe设备,可能仅支持一种报文.在PCIe设备中含有两个Capability结构,一个是MSI Capabilit ...

  5. 配置JBoss环境变量

    配置JBoss环境变量 1.单击"计算机"右键,选中"属性" 2.找到"高级系统设置",并且单击,会弹出一个窗口 3.选择"高级- ...

  6. Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.h2.Driver

    1.错误描述 WARN:2015-05-01 13:26:10[localhost-startStop-1] - HHH000402: Using Hibernate built-in connect ...

  7. Regex 正则替换指定范围全部字符串

    1.正则替换字符-------------------------------------------------------------------------------------------- ...

  8. javaWeb学习之页面js树

    常用方法add(parameters):添加节点信息 Index Name Type Discription 1 id Number 当前节点的ID 2 preId Number 当前节点的父节点ID ...

  9. JavaScript设计模式(7)-设配器模式

    适配器模式 1. 作用: 协调两个不同的接口 2. 适用场景 适配器适用于客户期待的接口与现有 API 提供的接口不兼容这种场景.他只能用来协调语法上的差异问题.适配器所适配的两个方法执行的应该是类似 ...

  10. C# 图解教程 第一章 C#和.NET框架

    C#和.NET框架 在.NET之前.NET时代 .NET框架的组成大大改进的编程环境 编译成CIL编译成本机代码并执行CLR Common Language RuntimeCLI Common Lan ...