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!

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