Liquibase 数据库版本管理插件的配置和使用

Liquibase 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog文件中,便于版本跟踪控制,尤其是在敏捷开发模式中, 它的目标是提供一种数据库类型无关的解决方案,通过执行 schema 类型的文件来达到迁移。


自动化CI所采用的常见插件

Liquibase 的简单介绍

Liquibase 具备如下特性:

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

在项目中配置使用Liquibase

在Gradle项目中, 配置使用Liquibase

gradle构建脚本使用groovy

  1. 首先在build.gradle中引入Liquibase 插件
buildscript {
    ext {
        springBootVersion = '2.1.0.RELEASE'
    }
    repositories {
        mavenCentral()
        maven {
            url 'https://plugins.gradle.org/m2/'
        }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        classpath 'org.liquibase:liquibase-gradle-plugin:2.0.1'
    }
}

// 以外部文件的方式引入插件
apply from: 'gradle/liquibase.gradle'
  1. 看一下liquibase.gradle文件里面的内容
apply plugin: 'org.liquibase.gradle'

def getLiquibaseProperties = {
    def properties = new Properties()
    file("src/main/resources/db/liquibase/liquibase.properties").withInputStream { inputStream ->
        properties.load(inputStream)
    }
    properties
}

ext.liquibaseProperties = getLiquibaseProperties()

liquibase {
    activities {
        main {
            driver liquibaseProperties['jdbcDriver']
            changeLogFile liquibaseProperties['changeLog']
            url liquibaseProperties['jdbcUrl']
            username liquibaseProperties['jdbcUser']
            password liquibaseProperties['jdbcPassword']
        }
    }
}
  1. 因为liquibase需要将开发人员修改的SQL执行到数据库中, 所以需要配置数据库的连接信息
    src/main/resources/db/liquibase/liquibase.properties
jdbcUrl=jdbc:mysql://xxxxx:3306/moon?useUnicode=true
jdbcDriver=com.mysql.cj.jdbc.Driver
jdbcUser=username
jdbcPassword=password
changeLog=src/main/resources/db/liquibase/changelog.mysql.sql
  1. liquibase所要维护的数据库变化都放在changeLog文件中
    src/main/resources/db/liquibase/changelog.mysql.sql
--liquibase formatted sql [任务ID]-[日期]-[序号],如 Task001-20190625-001

--changeset moon:Task001-20190625-001
create table test (
  id int(11),
  name varchar(32)
);

--changeset moon:Task002-20190625-001
insert into test values (1, 'Hinsteny'), (2, 'moon');
  1. 在命令行终端执行以下命令对插件进行使用
// 将changeLog中的修改应用到数据库
gradlew update

Over!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章