一、前言

Liquibase 是一个用于跟踪,管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据) 都保存在XML文件中,便于版本控制。

liquibase说白了就是一个将你的数据库脚本转化为xml格式保存起来,其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。

二、SpringBoot集成Liquibase

2.1 导入依赖

maven:

 <!-- https://mvnrepository.com/artifact/org.liquibase/liquibase-core --><dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId><version>4.5.0</version></dependency>

gradle:

// https://mvnrepository.com/artifact/org.liquibase/liquibase-core
implementation group: 'org.liquibase', name: 'liquibase-core', version: '4.5.0'

2.2 Liquibase配置文件application.yml

spring:datasource:url: jdbc:mysql://xxx.xxx.x.xxx:xxxx/liquibase?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverliquibase:#导包后默认开启,可以不用设置enabled: true#主文件路径,可以不配置,不配置会默认去找resource/db/changelog文件夹下找db.changelog-master.yaml文件,如果找不到则会启动报错,如下图change-log: /liquibase/master.xml


当然,也可以不写配置文件,使用config bean代替,如下:LiquibaseConfig.java

@Configuration
public class LiquibaseConfig {@Beanpublic SpringLiquibase liquibase(DataSource dataSource) {SpringLiquibase liquibase = new SpringLiquibase();liquibase.setDataSource(dataSource);//指定changelog的位置,这里使用的一个master文件引用其他文件的方式liquibase.setChangeLog("classpath:liquibase/master.xml");//liquibase.setContexts("development,test,production");liquibase.setShouldRun(true);return liquibase;}}

2.3 创建Liquibase文件

这里建的文件夹路径要和配置文件中的路径对应。
master.xml文件:

<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://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 是相对路径。3: include 标签可以单独指定某一个文件。--><include file="liquibase/changelog/changelog-1.0.xml" /><!--<includeAll path="liquibase/changelog/" relativeToChangelogFile="false"/>--><!--<include file="liquibase/changelog/changelog-1.2.xml" relativeToChangelogFile="false"/>--></databaseChangeLog>

changelog-1.0.xml文件:

<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"><!--建表--><changeSet author="Felix.Du" id="20211029-01"><createTable tableName="dh_project_category" remarks="项目类型表"><column name="id" type="varchar(64)" remarks="项目类型id"><constraints primaryKey="true" nullable="false"/></column><column name="name" type="varchar(255)" remarks="类目类型名称"/><column name="status" type="int(11)" remarks="状态。1正常,2删除"/><!--test--><column name="remark" type="varchar(255)" remarks="备注"/></createTable></changeSet><!--建主键--><changeSet author="Felix.Du" id="20211029-02"><preConditions onFail="MARK_RAN"><not><primaryKeyExists tableName="T_TABLE_NAME" primaryKeyName="ID" /></not></preConditions><addPrimaryKey columnNames="ID" tableName="T_TABLE_NAME" /></changeSet><!--增加字段--><changeSet author="Felix.Du" id="20211029-03"><preConditions onFail="MARK_RAN"><not><columnExists tableName="T_TABLE_NAME" columnName="CODE" /></not></preConditions><addColumn tableName="T_TABLE_NAME"><column name="CODE" remarks="" type="VARCHAR2(40)" /></addColumn></changeSet><!--删除字段--><changeSet author="Felix.Du" id="20211029-04"><dropColumn columnName="code1" tableName="T_TABLE_NAME" /></changeSet><!--更新数据--><changeSet author="Felix.Du" id="20211029-05" dbms="oracle" failOnError="false"><sql splitStatements="false" stripComments="true">update t_table_name s set s.code=s.code1</sql></changeSet></databaseChangeLog>

id:数据库保存的唯一id
author:对数据库进行修改的负责人,方便出问题的时候能找到对应的负责人。

使用如上的语法基本上能满足平常的工作需要,当然还有更多的功能,读者可以自行百度。当你进行如上操作,启动项目后,会看到数据库会新增两个关于liquibase的表。
databasechangelog:记录的是每一次表修改的记录,里面会详细记录操作的类型和操作。
部分字段释义:
ID:唯一id,在changeSet标签中的id属性配置
AUTHOR : 作者(操作人)
FILENAME:本次操作执行的文件路径+文件名
DATEEXECUTED: 执行日期
ORDEREXECUTED:执行顺序
EXECTYPE:执行类型(已执行,执行失败)
MD5SUM:MD5
DESCRIPTION : 描述
COMMENTS
TAG
LIQUIBASE : liqubase的版本号
CONTEXTS : 备注,可以在changeSet标签中的context属性配置
LABELS :
DEPLOYMENT_ID : Liquibase自动生成的一个id

databasechangeloglock:用于确保两台计算机不会同时尝试修改数据库。

当然也可以直接在changeSet标签中引sql文件。
changelog.xml文件:

<databaseChangeLogxmlns="http://www.liquibase.org/xml/ns/dbchangelog"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangeloghttp://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"><changeSet context="新建mine_admin表" id="20211029-06" author="Felix.Du"><sqlFile path="liquibase/sql/mine.sql"/></changeSet></databaseChangeLog>

mine.sql文件:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for mine_admin
-- ----------------------------
DROP TABLE IF EXISTS `mine_admina`;
CREATE TABLE `mine_admina` (`id` bigint NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL COMMENT '用户名',`password` varchar(255) DEFAULT NULL COMMENT '密码',`name` varchar(50) DEFAULT NULL COMMENT '姓名',`status` tinyint(1) DEFAULT NULL COMMENT '启用状态0->禁用,1->启用',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='后台管理员';SET FOREIGN_KEY_CHECKS = 1;

注意:changeSet标签中的id属性不能重复!

SpringBoot集成Liquibase相关推荐

  1. Springboot 集成 Liquibase

    一 .Liquibase官网: https://www.liquibase.org/ 二.Liquibase开发文档: https://docs.liquibase.com/ 三.Liquibase简 ...

  2. SpringBoot集成Actuator端点配置

    1.说明 Actuator端点可以监控应用程序并与之交互. Spring Boot包括许多内置的端点, 比如health端点提供基本的应用程序运行状况信息, 并允许添加自定义端点. 可以控制每个单独的 ...

  3. [Liquibase]集成liquibase的两种形式

    文章目录 一.springboot方式集成 1.引入依赖 pom.xml 2.application.yml配置 3.master.xml主文件 4.数据修改文件 4.1xml形式 4.2 sql形式 ...

  4. 【flyway】SpringBoot集成Flyway

    目录 Flaway是什么? SpringBoot集成Flyway --gradle项目 注意 Flaway是什么? Flyway是一款数据库迁移(migration)工具.简单点说,就是在你部署应用的 ...

  5. SpringBoot 集成Flowable设计器(Flowable-ui)

    一.项目场景: 提示:使用版本6.7.0 公司使用前后端项目分离,前端使用bpmn插件生成bpmn xml文件,后端解析处理数据.今天主要介绍后端集成flowable设计器的过程中遇到的问题. 如需了 ...

  6. SpringBoot结合Liquibase实现数据库变更管理

    <从零打造项目>系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 ...

  7. 使用liquibase进行数据库迁移(Postgresql/Mysql)——springboot整合Liquibase以及使用maven命令执行Liquibase同步更新数据

    文章目录 一.什么是Liquibase? 1.liquibase的优点 2.liquibase的基本概念 3.官网地址 二.SpringBoot整合Liquibase 1.简介 2.项目结构 3.测试 ...

  8. SpringBoot集成Mybatis项目实操

    本文为<从零打造项目>系列第三篇文章,首发于个人网站. <从零打造项目>系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 ...

  9. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源

    全文内容: Mongodb安装 说明:Mongodb和redis是开发中常用的中间件,Redis的安装使用比较简单就不写了,只说本地也就是Windows安装Mongodb. SpringBoot集成M ...

最新文章

  1. python开发函数进阶:递归函数
  2. DELL服务器重做RAID
  3. 在 Flutter 中使用 NavigationRail 和 BottomNavigationBar
  4. ELK日志平台一 ElasticSearch的安装
  5. 大数据互联网架构阶段 数据库三范式与反范式
  6. 51 nod 1495 中国好区间 奇葩卡时间题 700ms 卡O(n*log(n)), 思路:O(n)尺取法
  7. Spring手动回滚事务
  8. Underscore.js 的模板功能
  9. SOCK_STREAM和SOCK_DGRAM两种类型的区别
  10. 草稿django添加自定义模板代码的用法
  11. 【JQuery】数据
  12. Dialog里加入下拉框Java_android 自定义dialog弹出框,带单选多选下拉
  13. 溯雪-轻博客PHP开源系统
  14. NVDIMM在闪存存储中的应用探讨
  15. sbc,aac,aptx,ldac蓝牙编码简单介绍。
  16. 启动 jack server 出现 Could not find or load main class com.android.jack.launcher.ServerLauncher的问题
  17. C语言实现文件的局部修改,C语言:在文件的指定位置实现局部修改,而无需重写文件的其他部分...
  18. Odoo | 基础 | 初识系统-ORM之字段属性对象Field
  19. 【转】最新版Tinyumbrella4.21.02备份iPad SHSH教程
  20. 奶瓶linux下载软件,求可以在虚拟机上直接加载的奶瓶镜像文件,运行linux系统即可运行奶瓶,哪位好心人可以发给我...

热门文章

  1. java获取图片的长宽尺寸(毫米)
  2. 无线桥接怎么设置网关和dns服务器,无线桥接怎么设置网关和dns服务器
  3. 串行通信基础、串行数据传输方式
  4. 期许2016 迎新春技术分享沙龙总结
  5. 网络带宽和下载速度的换算
  6. “3D游戏之父”手游考古,网友:求支持智能手机!
  7. [转载]Meta Learning单排小教学
  8. SQL中modify和alter用法区别
  9. 计算机卸载应用程序的步骤,Win10系统下卸载应用程序的步骤
  10. 霞浦职业中专学校计算机专业,霞浦职业中专学校