Spring Boot集成liquibase快速入门Demo

ops/2024/10/19 23:29:31/

1.什么是liquibase

Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog 文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过执行 schema 类型的文件来达到迁移。

Liquibase 特性

  • 支持几乎所有主流的数据库,如 MySQL, PostgreSQL, Oracle, Sql Server, DB2 等;
  • 支持多开发者的协作维护;
  • 日志文件支持多种格式,如 XML, YAML, JSON, SQL等;
  • 支持上下文相关逻辑
  • 生成数据库变更文档
  • 支持多种运行方式,如命令行、Spring 集成、Maven 插件、Gradle 插件等。

2.环境准备

version: '3'
services:mysql:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/mysql:5.7container_name: mysql_3306restart: unless-stoppedvolumes:- "./mysql/my.cnf:/etc/mysql/my.cnf"- "./mysql/init-file.sql:/etc/mysql/init-file.sql"- "./mysql/data:/var/lib/mysql"
#      - "./mysql/conf.d:/etc/mysql/conf.d"- "./mysql/log/mysql/error.log:/var/log/mysql/error.log"- "./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d" # init sql script directory -- tips: it can be excute  when `/var/lib/mysql` is emptyenvironment:                        # set environment,equals docker run -eTZ: Asia/ShanghaiLANG: en_US.UTF-8MYSQL_ROOT_PASSWORD: root         # set root passwordMYSQL_DATABASE: root              # init database nameports:                              # port mappping- "3306:3306"

注意my.cnf在windows系统必须为只读,否则忽略

docker-compose -f docker-compose.yml -p mysql57 up -d

3.代码工程

实验目标

实验mysql数据初始化

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.1</version></parent><modelVersion>4.0.0</modelVersion><artifactId>Liquibase</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency></dependencies><build><plugins><plugin><groupId>org.liquibase</groupId><artifactId>liquibase-maven-plugin</artifactId><configuration><!--生成Changelog的输出目录--><outputChangeLogFile>${basedir}/src/main/resources/liquibase/generate/changeLog.xml</outputChangeLogFile><!--DB连接信息--><driver>com.mysql.jdbc.Driver</driver><url>jdbc:mysql://localhost:3306/demo?useSSL=false</url><username>root</username><password>root</password><dropFirst>false</dropFirst><verbose>true</verbose><logging>debug</logging><promptOnNonLocalDatabase>false</promptOnNonLocalDatabase><outputFileEncoding>UTF-8</outputFileEncoding><propertyFileWillOverride>true</propertyFileWillOverride></configuration></plugin></plugins></build>
</project>

applocation.properties

spring.datasource.url = jdbc:mysql://127.0.0.1:3306/demo?createDatabaseIfNotExist=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driverspring.liquibase.change-log = classpath:liquibase/master.xml
spring.liquibase.contexts = dev

changlog配置目录

400928528

也可以使用插件生成,如下图所示

28404

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/springboot-demo: a simple springboot demo with some components for example: redis,solr,rockmq and so on.(liquibase

4.测试

启动Spring Boot应用程序,查看启动日志

2024-08-05T14:36:52.691+08:00 INFO 26572 --- [ main] liquibase.changelog : Reading from demo.databasechangelog
Database is up to date, no changesets to execute
2024-08-05T14:36:52.730+08:00 INFO 26572 --- [ main] liquibase.changelog : Reading from demo.databasechangelog
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : UPDATE SUMMARY
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : Run: 0
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : Previously run: 1
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : Filtered out: 0
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : -------------------------------
2024-08-05T14:36:52.737+08:00 INFO 26572 --- [ main] liquibase.util : Total change sets: 1
2024-08-05T14:36:52.738+08:00 INFO 26572 --- [ main] liquibase.util : Update summary generated
2024-08-05T14:36:52.755+08:00 INFO 26572 --- [ main] liquibase.lockservice : Successfully released change log lock
2024-08-05T14:36:52.757+08:00 INFO 26572 --- [ main] liquibase.command : Command execution complete

因为我之前已经启动过一次,sql已经被执行了,所以第二次不会再执行。

03394071

Liquibase默认会生成databasechangelog和databasechangeloglock表(记录变更日志)

5.引用

  • Liquibase Documentation
  • Spring Boot集成liquibase快速入门Demo | Harries Blog™

http://www.ppmy.cn/ops/92060.html

相关文章

html制作卡通图案代码,使用HTML和CSS3绘制基本卡通图案的示例分享

一、&#x1f468;‍&#x1f393;网站题目 卡通网站的设计与制作。 二、✍️网站描述 - 卡通kitty猫主题的网页 一共八个页面 - kitty猫网页使用html css js制作 有banana图 - 页面可以相互跳转 包含表单 三级页面 - 网页可以使用vscode hbuilder dw等打开修改 - 里面的图片和…

记两次非常规文件上传Getshell

常规绕过前端和后端的任意文件上传已经没意思了&#xff0c;本文记录下之前和最近遇到的2个不太常规的任意文件上传Getshell的案例。 路径穿越文件上传Get Shell Nmap快速全端口扫描发现开放22&#xff0c;80和3306端口。访问目标&#xff0c;使用hfinger扫描发现Web应用使用…

使用分层相位对比断层扫描对成人健康和疾病状态下的心脏进行多维分析| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Multidimensional Analysis of the Adult Human Heart in Health and Disease Using Hierarchical Phase-Contrast Tomography 使用分层相位对比断层扫描对成人健康和疾病状态下的心脏进行多维分析 Background 背景 Current clinical imaging modalities such …

Vue+Vite+Element Plus基础操作

Vue.js 是一个流行的前端框架&#xff0c;‌而 Vite 是一个快速构建前端应用的新型开发服务器和构建工具&#xff0c;‌两者结合可以显著提升开发效率和体验。‌ Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;‌它易于上手且功能强大。‌Vue 的核心库只关注视图层&a…

Cpp DenseNet Tensorrt部署主体

Cpp DenseNet Tensorrt辅助函数 Python版本导引 Python DenseNet OpenVino导出Python DenseNet OpenVino推理Python DenseNet OpenVino打包 Cpp OpenVINO版本导引 Cpp DenseNet OpenVino导出Cpp DenseNet OpenVino测试Cpp DenseNet OpenVino环境配置Cpp DenseNet OpenVino …

Golang | Leetcode Golang题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; func oddEvenList(head *ListNode) *ListNode {if head nil {return head}evenHead : head.Nextodd : headeven : evenHeadfor even ! nil && even.Next ! nil {odd.Next even.Nextodd odd.Nexteven.Next odd.Nexteven even.N…

yolov5更换主干网络shufflent

目录 1.网络结构解析 1.1创建yolov5s_shufflent_v2_X0_5.yaml文件 2.对common.py末尾进行添加 3.修改yolo.py 1.网络结构解析 1.可以先看看shufflenet_v2的网络结构 import torch from torch import nn from torchvision import models from torchinfo import summaryclas…

C语言中常用的函数

处理字符串常用的函数 size_t strspn(const char *s, const char *accept); 函数参数说明&#xff1a; s是被查找的字符串 accepct是要匹配的字符串函数功能说明&#xff1a; 它返回s字符串起始部分中&#xff0c;完全由accept字符串中的字符组成的子字符串的长度函数返回值…