专栏首页开发杂记Liquibase的简单使用

Liquibase的简单使用

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的安装包,解压到指定目录下;
  1. 通过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上了,可以点击查看

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • springboot中使用mybatis显示执行sql

    springboot 中使用mybatis显示执行sql的配置,在properties中添加如下

    河岸飞流
  • zTree创建quickSearch检索框

    河岸飞流
  • Object 类型

    ECMAScript中大多数的引用类型都值都是Object类型的实例,Object也是使用最多的一个类型,主要用来在程序中存储和传输数据

    河岸飞流
  • 王永庆:技术创新改变教育未来

    我今天的内容偏产品层面,尽可能跟一些技术上的东西简单结合一下。我在VIPKID三年多,从最早期的产品构建,到现在运营都有深度的参与。我在分享的过程中,我想探讨的...

    云加社区技术沙龙
  • 这 8 篇文章告诉你:未来的软件研发是怎样的?

    最近,可能因为 Ledge、可能因为我写的文章,我和各种各样的人交流起了未来的软件开发,有腾讯云的,有阿里云的,有华为云的,还有各种各样的公司相关的项目,所以我...

    Phodal
  • mov fs:[0],esp的含义

    lea eax,SEH1[ebp] ;自己的异常处理函数地址 push eax ;把该异常处理函数地址压栈 push fs:[0] ...

    战神伽罗
  • 干货!机器人、无人机产业链全景图

    来源:新材料在线

    机器人网
  • 前端快速入门之概述

    以下是对(前端)可视化工作的并不系统的总结,新手向,主要是想说一下前端如何组成、功能如何实现、资源如何请求,进而说到数据如何显示,并在最后列举了一些十分重要的参...

    ZONGLYN
  • 水果与盘子的随机问题?怎么搞

    Jerry今天去超市买水果了,买了四种水果,分别是苹果、橙子、香蕉、梨。为什么这四种?可能是因为刚好促销吧,盛情难却(与插图不符哦)。回来以后打算每种水果吃一个...

    IC验证
  • 2018-08-01-日报

    1、研究了数据治理、数据质量两份文档,整理了产品的功能需求文档, 使用在线工具将pdf转化为word,使用工具将chm转为word,转化效果还挺好的。 2、...

    sparkle123

扫码关注云+社区

领取腾讯云代金券