Liquibase 是一個用於跟蹤、管理和應用數據庫變化的開源的數據庫重構工具。它將所有數據庫的變化(包括結構和數據)都保存在 changelog文件中,便於版本跟蹤控制,尤其是在敏捷開發模式中, 它的目標是提供一種數據庫類型無關的解決方案,通過執行 schema 類型的文件來達到遷移。
自動化CI所採用的常見插件
Liquibase 的簡單介紹
Liquibase 具備如下特性:
- 支持幾乎所有主流的數據庫,如 MySQL, PostgreSQL, Oracle, Sql Server, DB2 等;
- 支持多開發者的協作維護;
- 日誌文件支持多種格式,如 XML, YAML, JSON, SQL等;
- 支持上下文相關邏輯
- 生成數據庫變更文檔
- 支持多種運行方式,如命令行、Spring 集成、Maven 插件、Gradle 插件等。
在項目中配置使用Liquibase
在Gradle項目中, 配置使用Liquibase
gradle構建腳本使用groovy
- 首先在
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'
- 看一下
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']
}
}
}
- 因爲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
- 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');
- 在命令行終端執行以下命令對插件進行使用
// 將changeLog中的修改應用到數據庫
gradlew update
Over!