一 、Liquibase官网:
二、Liquibase开发文档:
三、Liquibase简介
- Liquibase是一种数据库架构更改管理解决方案,使您能够从开发到生产更快、更安全地修订和发布数据库更改。
- Liquibase使用 SQL、XML、JSON 和 YAML 更改日志文件按顺序列出数据库更改。数据库更改具有changesets格式。变更集changesets包含更改类型,更改类型是应用于数据库的操作类型,例如添加列或主键。上下文、标签和前提条件更改日志标记有助于精确控制何时进行数据库更改以及将其部署到哪个数据库环境。
三、Liquibase的优点
- 配置文件支持SQL、XML、JSON 或者 YAML
- 版本控制按序执行
- 可以用上下文控制sql在何时何地如何执行
- 支持schmea的变更
- 根据配置文件自动生成sql语句用于预览
- 可重复执行迁移
- 可插件拓展
- 可回滚
- 可兼容14中主流数据库如oracle,mysql,pg等,支持平滑迁移
- 支持schema方式的多租户(multi-tenant)
四、Springboot 集成 Liquibase
1. pom文件引入依赖
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.17.2</version>
</dependency>
2. 添加maven plugin,集成liquibase命令
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<configuration>
<propertyFileWillOverride>true</propertyFileWillOverride>
<propertyFile>${basedir}/src/main/resources/liquibase.properties</propertyFile>
</configuration>
<executions>
<execution>
<goals>
<goal>update</goal>
</goals>
</execution>
</executions>
</plugin>
3. resources 下新建liquibase.properties文件:
#要连接库配置信息
driver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@//10.0.0.0:1521/ORCL
username = cloud_dev
password = cloud_dev
changeLogFile = /src/main/resources/liquibase/changelog/init_table.sql
#生成文件的路径
outputChangeLogFile = src/main/resources/liquibase/temp/changelog.oracle.xml
#输出文件编码
outputFileEncoding=UTF-8
#若是须要在父项目中配置子项目共享的LiquiBase配置,而各个子项目能够定义本身的配置,并覆盖父项目中的配置
propertyFileWillOverride = off
#执行的时候是否显示详细的参数信息
verbose = true
#选择生成数据库需要保留类型
diffTypes = tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data
4. yaml增加liquibase
liquibase:
enabled: true
change-log: classpath:liquibase/master.xml
启动项目自动执行liquibase,扫描master.xml 文件,执行include 节点下changelog文件初始化数据库。
<!--master.xml文件-->
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<!--
1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。
2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。
2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置
2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。
-->
<!-- <includeAll path="/sql" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/temp/changelog.oracle.xml" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/temp/changelog_init.xml" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/temp/changelog_sm_v1.0.xml.xml" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/temp/changelog_lm_v1.0.xml.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
5. maven 命令:
使用maven命令 :liquibase:generateChangeLog 根据liquibase.properties文件配置逆向生成outputChangeLogFile文件。
6. 常用maven命令:
命令 | 说明 |
---|---|
liquibase:generateChangeLog | 逆向生成ChangeLog文件,支持yaml、xml、json、sql格式 |
liquibase:update | 更新changelog 到数据库 |
liquibase:updateSQL | 预更新,检查sql执行情况 |
liquibase:dbDoc | 基于现有数据库和变更日志生成文档 |
五、ChangeLog 中changeSet组成标签
1、add
标签 | 说明 |
---|---|
addAutoIncrement | 将已存在的列改为自增列 |
addColumn | 增加列 |
addDefaultValue | 增加列的默认值 |
addForeignKeyConstraint | 增加外键 |
addLookupTable | 创建外键的关联表 |
addNotNullConstraint | 增加非空值约束 |
addPrimaryKey | 增加主键 |
addUniqueConstraint | 增加唯一值约束 |
2、create
标签 | 说明 |
---|---|
createIndex | 创建索引 |
createProcedure | 创建存储过程 |
createSequence | 创建序列 |
createTable | 创建表 |
createView | 创建视图 |
3、drop
标签 | 说明 |
---|---|
dropAllForeignKeyConstraints | 删除全部外键约束 |
dropColumn | 删除列 |
dropDefaultValue | 删除默认值 |
dropForeignKeyConstraint | 删除某一外键约束 |
dropNotNullConstraint | 删除空值约束 |
dropPrimaryKey | 删除主键 |
dropProcedure | 删除存储过程 |
dropSequence | 删除序列 |
dropTable | 删除表 |
dropUniqueConstraint | 删除唯一约束 |
dropView | 删除视图 |
4、rename
标签 | 说明 |
---|---|
renameColumn | 重命名列 |
renameSequence | 重命名序列 |
renameTable | 重命名表 |
renameView | 重命名视图 |
5、sql
标签 | 说明 |
---|---|
sql | sql语句 |
sqlFile | sql文件 |
6、其他
标签 | 说明 |
---|---|
insert | 插入数据 |
update | 更新数据 |
delete | 删除数 |
empty | 空操作 |
executeCommand | 执行命名 |
alterSequence | 修改序列 |
customChange | 自定义操作,需自己实现 |
loadData | 导入csv数据至已存在的表中 |
loadUpdateData | 导入csv数据至表中,表不存在则新建 |
mergeColumns | 合并列 |
modifyDataType | 修改数据类型 |
output | 输出日志 |
setColumnRemarks | 增加列说明 |
setTableRemarks | 增加表说明 |
stop | 停止liquibase |
tagDatabase | 打标签用于将来回滚 |