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!