前言
数据版本管理 很多工具 java主要有 liquibase flyway python的SQLAlchemy
liquibase 和flyway 各有侧重点 flyway胜在简单粗暴 直接管理sql脚本
liquibase 胜在可以通过配置去管理db版本 可以不用写单一平台的sql脚本 如果项目用jpa 之类的 orm框架 那么更加适合liquibase 去管理
今天有时间 顺手记录一下 方便自己速查
liquibase 通过两张表来达到不重复执行 和执行锁定
默认表名:databasechangelog、databasechangeloglock
示例
基于spring boot 2.x
增加liquibase依赖
gradle
1
implementation 'org.liquibase:liquibase-core'
maven
1
2
3
4<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
配置liquibase
直接通过yaml配置
1
2
3
4
5
6
7spring:
# 所有配置参考 org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties
liquibase:
# 开启liquibase 启动加载
enabled: true
# liquibase db变更配置地址
change-log: 'change/master.xml'自定义liquibase配置
1
2
3
4
5spring:
# 所有配置参考 org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties
liquibase:
# 关闭spring boot 默认的 liquibase配置
enabled: false1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30package com.ming.base.orm;
import liquibase.integration.spring.SpringLiquibase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.DefaultResourceLoader;
import javax.sql.DataSource;
/**
* 配置 liquibase
*
* @author ming
* @date 2020-12-29 15:18
*/
public class SpringLiquibaseConfig {
public SpringLiquibase configLiquibase(DataSource dataSource) {
SpringLiquibase springLiquibase = new SpringLiquibase();
springLiquibase.setChangeLog("classpath*:liquibase/master.xml");
springLiquibase.setDataSource(dataSource);
springLiquibase.setShouldRun(true);
springLiquibase.setResourceLoader(new DefaultResourceLoader());
springLiquibase.setDatabaseChangeLogTable("database_change_log");
springLiquibase.setDatabaseChangeLogLockTable("database_change_log_lock");
return springLiquibase;
}
}
定义liquibase 数据库变更配置
在 liquibase目录下建立 master.xml 内容如下
1 | <databaseChangeLog |
liquibase 支持 xml yaml json sql 等等配置格式 具体可以自由选择
https://www.liquibase.org/
启动项目
当包含liquibase相关任务执行的日志 则代表liquibase 已经接入完成 可以直接使用了
1 | 2021-01-04 14:48:20.928 [main] INFO liquibase.lockservice.StandardLockService- Successfully acquired change log lock |
总结
liquibase 我个人喜欢用 使用起来会比flyway繁琐
胜在可以通过配置 去变更不同db的结构 当管理多种数据库的时候不用写不同方言的sql
flyway 有时间我也会记录一下 那个比较简单 就是按照规则编写sql的文件名 即可