springboot3 liquibase SQL执行失败自动回滚,及自动打tag
一: 自动执行回滚, 已执行成功的忽略,新sql执行失败则执行新sql文件中的回滚sql
pom.xml
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.25.0</version>
</dependency>
sql 文件指定回滚sql

新建一个 CustomChangeExecListener 继承 AbstractChangeExecListener
@Service
@Slf4j
public class CustomChangeExecListener extends AbstractChangeExecListener {@SneakyThrowspublic void runFailed(ChangeSet changeSet, DatabaseChangeLog databaseChangeLog, Database database, Exception exception) {log.error("sql执行失败, 执行回滚sql, 错误原因: {}", exception.getMessage());String line = "\r\n";String jdbc = "jdbc";List<String> sqlList = new ArrayList<>();changeSet.getRollback().getChanges().stream().forEach(e->{RawSQLChange rawSQLChange = (RawSQLChange) e;Arrays.asList(rawSQLChange.getSql().split(line)).stream().forEach(sql->{sqlList.add(sql);});});if(CollectionUtils.isEmpty(sqlList)){return;}Executor executor = Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor(jdbc, database);for (String sql : sqlList){executor.execute(new RawSqlStatement(sql));}}}
启动参数加上:
-Dliquibase.command.changeExecListenerClass=com.tang.execListener.CustomChangeExecListener
2️⃣: 自动打tag, 注意如果有上面的自动执行回滚sql, 这一步不是很重要
spring.liquibase.tag 不起作用, 搞个自动打tag
1: github 拉取源码
地址:GitHub - liquibase/liquibase: Main Liquibase Source
2: idea 打开如下路径:
liquibase/sqlgenerator/core/MarkChangeSetRanGenerator.java
加入如下代码:
if(change instanceof RawSQLChange){tag = changeSet.getId();}

把编译的class 替换jar路径中的class放到仓库
sql文件中加入标记如下: 作者:id
加入上面的代码,tag会拿这个id 作为tag标签。

执行结果:

相关文章:
springboot3 liquibase SQL执行失败自动回滚,及自动打tag
一: 自动执行回滚, 已执行成功的忽略,新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…...
Flink入门之核心概念(三)
任务槽 TaskSlots: 任务槽,是TaskManager提供的用于执行Task的资源(CPU 内存) TaskManager提供的TaskSlots的个数:主要由Taskmanager所在机器的CPU核心数来决定,不能超过CPU的最大核心数 1.可以在flink/conf/flink-c…...
算法备胎hash和队列的特征——第五关青铜挑战
内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出&#…...
LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力
论文地址:https://arxiv.org/pdf/2310.12823.pdf Github地址:https://github.com/THUDM/AgentTuning 在ChatGPT带来了大模型的蓬勃发展,开源LLM层出不穷,虽然这些开源的LLM在各自任务中表现出色,但是在真实环境下作…...
LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型
浙大和微软亚洲研究院开源的HuggingGPT,又名JARVIS,它可以根据用户的自然语言描述的需求就可以自动分析需要哪些AI模型,然后去Huggingface上直接调用对应的模型,最终给出用户的解决方案。 一、HuggingGPT的工作流程 它的…...
【上海大学数字逻辑实验报告】五、记忆元件测试
一、实验目的 掌握R-S触发器、D触发器和JK触发器的工作原理及其相互转换。学会用74LS00芯片构成钟控RS触发器。学会用74LS112实现D触发器学会在Quartus II上用D触发器实现JK触发器。 二、实验原理 基本R-S触发器是直接复位-置位的触发器,它是构成各种功能的触发器…...
yaml工作常用语法总结
文章目录 yaml中的| 符号 和 > 符号yaml中的 - 符号工作中常遇到的问题- 命令行中有冒号加空格,导致yaml解析报错 yaml中的| 符号 和 > 符号 在 YAML 中,| 符号表示标量块(Scalar Block)的开始。它用于表示长文本块或保持多…...
bash中通过变量中的内容获取对应的关联数组
bash中通过变量中的内容获取对应的关联数组 Bash declare 手册: https://phoenixnap.com/kb/bash-declare 实际问题: 在 bash 中创建了多个关联数组,需要根据输入的值,获取不同的关联数组。 可以使用 if 进行多次判断ÿ…...
Redis Geo操作地理位置
Redis Geo 使用场景API列表名词API列表Springboot使用mavenyamlTest 注意事项 Redis Geo 是Redis在3.2版本中新增的功能,用于存储和操作地理位置信息 使用场景 滴滴打车:这是一个对地理位置精度要求较高的场景。通过使用Redis的GEO功能,滴滴…...
市面上的AR眼镜:优缺点分析
AR眼镜是近年来备受关注的科技产品之一。它通过将虚拟信息叠加到现实世界中,为用户提供全新的视觉体验。目前,市面上的AR眼镜主要分为两类:消费级AR眼镜和企业级AR眼镜。 消费级AR眼镜 消费级AR眼镜的特点是轻便、时尚、易于佩戴࿰…...
2024年湖南省职业院校技能竞赛高职组电子与信息专业类软件测试赛项竞赛规程及样题
湖南省职业院校技能竞赛 高职组电子与信息专业类软件测试赛项竞赛规程及样题 一、竞赛内容 1.本赛项考查的技术技能和涵盖的职业典型工作任务 任务项 任务名称 职业典型工作任务 任务一 功能测试 测试计划、测试报告文档设计与编写、测试用例 设计、测试执行和 Bug记录 任务二…...
10、pytest通过assert进行断言
官方实例 # content of test_assert1.pydef f():return 3def test_function():assert f() 4def test_assert_desc():a f()# assert a % 2 0assert a % 2 0, "value was odd, should be even"解读与实操 pytest允许你使用标准python断言来验证测试中的期望值&am…...
Webpack技术入门与实践
1.概念: 本质上, webpack是一个现代JavaScript应用程序的静态模块打包器,当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bund…...
HarmonyOS开发(九):数据管理
1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分: 数据存储:提供通用数据持久化能力,根据数据特点,分为用户首选项、键值型数据库和关系型数据库。数据管理:提供高效的数据管…...
acwing-Linux学习笔记
acwing-Linux课上的笔记 acwing-Linux网址 文章目录 1.1常用文件管理命令homework作业测评命令 2.1 简单的介绍tmux与vimvimhomeworktmux教程vim教程homework中的一些操作 3 shell语法概论注释变量默认变量数组expr命令read命令echo命令printf命令test命令与判断符号[]逻辑运算…...
Python渗透测试——一、数据包的编辑工具——Scapy
Python渗透测试 一、Scapy简介二、Scapy中的分层结构三、Scapy中的常用函数四、在Scapy 中发送和接收数据包五、Scapy 中的抓包函数 一、Scapy简介 提到数据包(这里泛指帧、段和报文等)的构造,我们首先需要了解协议和分层这两个概念。在“互联世界的规则一协议”中…...
使用webstrom编写vue开启提示
1.语言服务器选择 2.文件类型–忽略的文件和文件夹,删去,node_modules,就可以点进去库了 3.禁用JSLint、TSLint 4.开启node辅助 5.如果是vite,开启自动读取,或手动指定 6.如果是Webpack,开启自动读取&#…...
linux远程桌面管理工具(xrdp)、向日葵
Windows远程桌面 linux远程桌面 使用向日葵远程桌面(手机端同理) Windows远程桌面 微软自带Remote Desktop Connection Manager (RDCMan)远程控制管理软件介绍 远程桌面连接管理器 v2.93 linux远程桌面 Windows远程桌面Ubunt…...
【力扣100】8.找到字符串中所有字母异位词
添加链接描述 class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:sildingstrresult[]p.join(sorted(p))for i in range(len(s)):if len(sildingstr)<len(p):sildingstrsildingstrs[i]# print(sildingstr)if len(sildingstr)len(p):sort_sildingstr.j…...
圆通速递查询,圆通速递单号查询,用表格导出查询好的物流信息
批量查询圆通速递单号的物流信息,以表格的形式导出查询好的物流信息。 所需工具: 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,并登录 步骤2:点击主界…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
数据分析六部曲?
引言 上一章我们说到了数据分析六部曲,何谓六部曲呢? 其实啊,数据分析没那么难,只要掌握了下面这六个步骤,也就是数据分析六部曲,就算你是个啥都不懂的小白,也能慢慢上手做数据分析啦。 第一…...
第22节 Node.js JXcore 打包
Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本,基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...
基于Python的气象数据分析及可视化研究
目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...
