前言
不知不觉已过去一个月,7月12入职了现在这家公司。首先工资涨了30%,其次技术栈是主流技术栈。再也不用看亚信的appframe了。(▽)。但是现在也没之前那样舒服了,需求也挺多。
说说Liquibase吧,Liquibase
是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过执行 schema 类型的文件来达到迁移。
SpringBoot集成Liquibase
添加依赖
因为 Spring Boot 已经内置支持整合 Liquibase,我们只需要在项目工程中引入 Liquibase 的依赖进行配置即可。
<!-- 集成Liquibase 组件维护数据及数据表的迭代 -->
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
配置application
项目上是这么配置的
spring:
#是否开启liquibase 默认true
liquibase:
enabled: true
change-log: classpath:liquibase/release/master.xml
更具体点配置如下
#低版本前没有spring. 2.1版本后配置为spring.liquibase
# 启用liquibase
liquibase.enabled=true
# 存储变化的文件(changelog)位置
liquibase.change-log=classpath:sample_change.sql
# 检查存储变化的文件是否存在
liquibase.check-change-log-location=true
# 分环境执行,若在 changelog 文件中设置了对应 context 属性,则只会执行与 dev 对应值的 changeset
liquibase.contexts=dev
# 执行前首先删除数据库,默认 false。若设置为 true,则执行变更前,会先删除目标数据库,请谨慎
liquibase.dropFirst=false
# 执行更新时将回滚 SQL 写入的文件路径
liquibase.rollback-file=
# 如果使用工程已配置的 datasource 数据源,则以下三个数据库连接参数可不配置
## 访问数据库的连接地址
liquibase.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
# 访问数据库的用户名
liquibase.user=test
# 访问数据库的密码
liquibase.password=test
此时,在项目启动时,会去执行spring.liquibase.change-log文件。建议使用
xml配置格式的changeLogs文件
XML具体配置如下
变更级分类
changeSet 分为 6类:
- add
- create
- drop
- rename
- sql
- other
官方文档:https://docsstage.liquibase.c...,每一个标签都有其必须的参数,使用时根据情况自行设定即可
用法均为如下格式:
<changeSet>
<xxxx />
</changeSet>
2.3 drop
2.6 Other
2.常用变更集
上面这么多的标签,相信已经将很多人的眼睛看花了,不要紧,将它们全部罗列出主要还是想大家能够对 Liquibase 有一个更全面的理解,遇到某些场景时能够对症检索。
接下来我会介绍几个常用的标签,基本能够覆盖大多数场景。
2.1 SQL
最常用以及最顺手的就是 sql 标签,开发人员像使用 Mybatis 一样,写原生SQL,但是如果SQL比较复杂,可读性就不怎么好
<changeSet id="xxxx" author="jiaotd" labels="init" >
<sql>
USE `db_xxx`;
insert into table_t values(1,1,1);
</sql>
</changeSet>
2.2 sqlFile
sqlFIle 就是将上面 SQL 中的语句单独使用文件存储,在 sqlFIle 引入。
这样做的好处是 changelog 文件简单、整洁、可读性高、易于维护。
<changeSet id="xxxx" author="jiaotd" labels="init" >
<sqlFile path="update/xxxx.sql" relativeToChangelogFile="true"/>
</changeSet>
2.3 loadData
loadData 通常用于导入数据,一般我们用于系统升级时导入大量的数据。
<changeSet author="jiaotd" id="loadData-xxx">
<loadData commentLineStartsWith="//"
encoding="UTF-8"
file="example/users.csv"
quotchar="'"
relativeToChangelogFile="true"
schemaName="public"
separator=";"
tableName="person"
usePreparedStatements="true">
<column header="header1"
name="id"
type="NUMERIC"/>
<column index="3"
name="name"
type="BOOLEAN"/>
</loadData>
</changeSet>
评论区