LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。
LiquiBase的主要特点有:
支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
支持多开发者的协作维护;
日志文件支持多种格式,如XML, YAML, JSON, SQL等;
支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等;
changelog文件格式
changelog是LiquiBase用来记录数据库的变更,一般放在CLASSPATH下,然后配置到执行路径中。
changelog支持多种格式,主要有XML/JSON/YAML/SQL,其中XML/JSON/YAML除了具体格式语法不同,节点配置很类似,SQL格式中主要记录SQL语句,后面实例有给出XML格式和SQL格式的示例,更多的格式示例请参考http://www.liquibase.org/
一个
changelog中的一个changeSet对应一个事务,在changeSet执行完后commit,如果出现错误则rollback。
注意: 目前
pom.xml
org.liquibase
liquibase-core
@Configuration
public class LiquibaseConfig {
private @Autowired DataSource dataSource;
private @Autowired Environment environment;
@Bean(name = "liquibase")
public SpringLiquibase liquibase(){
SpringLiquibase lb = new SpringLiquibase();
lb.setDataSource(dataSource);
lb.setChangeLog("classpath:liquibase/changelog-master.xml"); lb.setContexts(environment.getProperty(StandardEnvironment.ACTIVE_PROFILES_PROPERTY_NAME));
return lb;
}
}
-- liquibase formatted sql
-- 部门
-- changeset lenky.li:department-createTable-20181205
CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL COMMENT '部门名称',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部门';
在执行changelog的时候,会在数据库记录执行记录,主要用了下面的两张表:
databasechangelog
databasechangeloglock
http://www.liquibase.org/documentation/rollback.html
https://github.com/icyxp/liquibase-demo
1、语法简单,开箱即用
2、功能强大,满足日常数据库脚本变更需求
3、版本管理方便,每次修改都有记录
4、与项目集成,项目启动执行数据库变更,发布省去手动初始化脚本
示例源码下载