当前位置: 首页 > news >正文

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

一&#xff1a; 自动执行回滚&#xff0c; 已执行成功的忽略&#xff0c;新sql执行失败则执行新sql文件中的回滚sql pom.xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.25.0&…...

Flink入门之核心概念(三)

任务槽 TaskSlots: 任务槽&#xff0c;是TaskManager提供的用于执行Task的资源&#xff08;CPU 内存&#xff09; TaskManager提供的TaskSlots的个数&#xff1a;主要由Taskmanager所在机器的CPU核心数来决定&#xff0c;不能超过CPU的最大核心数 1.可以在flink/conf/flink-c…...

算法备胎hash和队列的特征——第五关青铜挑战

内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希&#xff08;Hash&#xff09;也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变换成固定长度的输出&#…...

LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力

​论文地址&#xff1a;https://arxiv.org/pdf/2310.12823.pdf Github地址&#xff1a;https://github.com/THUDM/AgentTuning 在ChatGPT带来了大模型的蓬勃发展&#xff0c;开源LLM层出不穷&#xff0c;虽然这些开源的LLM在各自任务中表现出色&#xff0c;但是在真实环境下作…...

LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型

​ 浙大和微软亚洲研究院开源的HuggingGPT&#xff0c;又名JARVIS&#xff0c;它可以根据用户的自然语言描述的需求就可以自动分析需要哪些AI模型&#xff0c;然后去Huggingface上直接调用对应的模型&#xff0c;最终给出用户的解决方案。 一、HuggingGPT的工作流程 它的…...

【上海大学数字逻辑实验报告】五、记忆元件测试

一、实验目的 掌握R-S触发器、D触发器和JK触发器的工作原理及其相互转换。学会用74LS00芯片构成钟控RS触发器。学会用74LS112实现D触发器学会在Quartus II上用D触发器实现JK触发器。 二、实验原理 基本R-S触发器是直接复位-置位的触发器&#xff0c;它是构成各种功能的触发器…...

yaml工作常用语法总结

文章目录 yaml中的| 符号 和 > 符号yaml中的 - 符号工作中常遇到的问题- 命令行中有冒号加空格&#xff0c;导致yaml解析报错 yaml中的| 符号 和 > 符号 在 YAML 中&#xff0c;| 符号表示标量块&#xff08;Scalar Block&#xff09;的开始。它用于表示长文本块或保持多…...

bash中通过变量中的内容获取对应的关联数组

bash中通过变量中的内容获取对应的关联数组 Bash declare 手册&#xff1a; https://phoenixnap.com/kb/bash-declare 实际问题&#xff1a; 在 bash 中创建了多个关联数组&#xff0c;需要根据输入的值&#xff0c;获取不同的关联数组。 可以使用 if 进行多次判断&#xff…...

Redis Geo操作地理位置

Redis Geo 使用场景API列表名词API列表Springboot使用mavenyamlTest 注意事项 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存储和操作地理位置信息 使用场景 滴滴打车&#xff1a;这是一个对地理位置精度要求较高的场景。通过使用Redis的GEO功能&#xff0c;滴滴…...

市面上的AR眼镜:优缺点分析

AR眼镜是近年来备受关注的科技产品之一。它通过将虚拟信息叠加到现实世界中&#xff0c;为用户提供全新的视觉体验。目前&#xff0c;市面上的AR眼镜主要分为两类&#xff1a;消费级AR眼镜和企业级AR眼镜。 消费级AR眼镜 消费级AR眼镜的特点是轻便、时尚、易于佩戴&#xff0…...

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.概念&#xff1a; 本质上&#xff0c; webpack是一个现代JavaScript应用程序的静态模块打包器&#xff0c;当webpack处理应用程序时&#xff0c;它会递归地构建一个依赖关系图&#xff0c;其中包含应用程序需要的每个模块&#xff0c;然后将所有这些模块打包成一个或多个bund…...

HarmonyOS开发(九):数据管理

1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分&#xff1a; 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、键值型数据库和关系型数据库。数据管理&#xff1a;提供高效的数据管…...

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简介 提到数据包(这里泛指帧、段和报文等)的构造&#xff0c;我们首先需要了解协议和分层这两个概念。在“互联世界的规则一协议”中…...

使用webstrom编写vue开启提示

1.语言服务器选择 2.文件类型–忽略的文件和文件夹&#xff0c;删去&#xff0c;node_modules&#xff0c;就可以点进去库了 3.禁用JSLint、TSLint 4.开启node辅助 5.如果是vite&#xff0c;开启自动读取&#xff0c;或手动指定 6.如果是Webpack&#xff0c;开启自动读取&#…...

linux远程桌面管理工具(xrdp)、向日葵

Windows远程桌面 linux远程桌面 使用向日葵远程桌面&#xff08;手机端同理&#xff09; Windows远程桌面 微软自带Remote Desktop Connection Manager &#xff08;RDCMan&#xff09;远程控制管理软件介绍 远程桌面连接管理器 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…...

圆通速递查询,圆通速递单号查询,用表格导出查询好的物流信息

批量查询圆通速递单号的物流信息&#xff0c;以表格的形式导出查询好的物流信息。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...

Selenium 查找页面元素的方式

Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素&#xff0c;以下是主要的定位方式&#xff1a; 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…...