Liquibase的使用
LiquiBase
是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:
- 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
- 支持多开发者的协作维护;
- 日志文件支持多种格式,如XML, YAML, JSON, SQL等;
- 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。
更多详情介绍,可以浏览官网doc。
之所以选择使用liquibase,原因其实挺尴尬的,由于我不会使用容器化技术,不会写dockfile来运行项目初始化sql脚本,就想有没有什么简单方便的形式,最后看中了liquibase,配置起来确实简单方便。
我是用命令行的形式生成changeLog
,然后再集成到springboot
中。官网上提供的还有基于ant、maven和服务端的使用的方式,以后再研究。
-
下载liquibase的安装包,解压到指定目录下;
-
通过
generateChangeLog
生成现有数据库的changeLog文件;liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog
generateChangeLog命令默认只会创建数据库结构的变更日志文件,如果希望创建插入数据的变更日志文件,可以使用参数diffTypes,该参数包括如下可选项:
- tables [DEFAULT]表
- columns [DEFAULT] 列
- views [DEFAULT] 视图
- primaryKeys [DEFAULT] 主键
- indexes [DEFAULT] 索引
- foreignKeys [DEFAULT]
- sequences [DEFAULT]
-
data
例如生成数据:liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog
我分别生成了两个changeLog文件,一个是inti-table.xml; 一个是init-data.xml。
3.项目中配置liquibase
首先在项目中添加支持:<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency>
通过查看源码,我们能看到默认的配置文件存放的位置:
这里我没有使用默认的配置,指定了一个自己的路径,只需要在application.properties中添加如下配置:
#liquibase
liquibase.change-log=classpath:/liquibase/master.xml
--master.xml文件内容,通过inclue标签引入了两个changelog,就是之前的表结构和表数据。
<?xml version="1.0" encoding="utf-8"?>
<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.4.xsd">
<include file="classpath:liquibase/change_log/init-table.xml" relativeToChangelogFile="false"/>
<include file="classpath:liquibase/change_log/init-data.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
项目中的目录结构如下图所示:
到此已经位置好了,启动一下项目,控制台打印出liquibase初始化信息,这时候查看数据库,会表现数据库已经初始完毕,后面数据库如果有变动,可以再生成新的changelog文件,再次添加到项目中,达到持续集成的效果。整个项目的源代码已经托管到github上了,可以点击查看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端