springboot3 liquibase SQL执行失败自动回滚,及自动打tag

news2024/11/24 7:39:47

一: 自动执行回滚, 已执行成功的忽略,新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 {

    @SneakyThrows
    public 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标签。

执行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023.2版idea安装教程,现在jdk8已经过去式了,不同idea支持的jdk不同。升级jdk后idea也要随之升级

下载idea2023.2版本&#xff0c;下载之前需要删除之前的版本&#xff0c;一定要删除干净&#xff0c;删除程序要勾选那两个delete 下载路径&#xff1a;其他版本 - IntelliJ IDEA (jetbrains.com.cn) 选择2023.2版本 下载后进入安装程序&#xff0c;选择安装目录&#xff0c;然…

关于我自己搭建了一个完整的 网站 - 从零开始(服务器购买选型,域名备案,wordpress 主题,各种支付插件)

这篇博客主要介绍是如何在华为云上搭建一个 WordPress 网站。我将详细介绍从购买服务器到推广网站的整个过程&#xff0c;包括域名主机的备案。无论您是技术新手还是有一定经验的开发者&#xff0c;这篇文章都能为您提供有价值的指导。 第一步&#xff1a;选择云服务器 我选择…

计算一组x和y(一维数组)

输入30个整数a1,a2,a3,…,a30&#xff0c;计算所有的x与y。已知&#xff1a; 输入格式: 30个整数 输出格式: 计算得到的x1, x2,.......,x10 计算得到的y1, y2,.......,y10 所有输出精确到小数点后3位。 注意&#xff1a; 1、输出的每个“”左右各有一个空格&#xff0c;输出…

TrustZone之Translation Look aside Buffer(TLB)

TLB缓存最近使用的地址转换。处理器具有多个独立的translation regimes。TLB记录了一个条目表示的translation regime&#xff0c;包括安全状态。虽然TLBs的结构是由实现定义的&#xff0c;但以下图表显示了一个示例&#xff1a; 当软件在EL1或EL2中发出TLB失效操作&#xff08…

亚马逊运营推荐数仓项目实战

亚马逊运营推荐数仓项目实战 项目技术栈 HadoopSpark (Python)Scala SparkSQLSparkStreaming MongoDB Redis Kafka Flume ( SpringMVC vue) 1 项目介绍 1.1 项目系统架构 项目以推荐系统建设领域知名的经过修改过的中文亚马逊电商数据集作为依托&#xff0c;以某电商…

设置网络发现,合理利用共享,让自己在准确的地方出现或隐藏

本文介绍如何在Windows 11中打开或关闭网络发现。它还解释了网络发现的用途以及你可能想使用&#xff08;或不使用&#xff09;它的时间。 如何在Windows 11中切换网络发现 可以在“设置”中打开和关闭网络发现。 1、使用WINI快捷方式打开“设置”或从任务栏中搜索。 2、选…

【数据结构】——队列实现二叉树的功能

前言&#xff1a;二叉树的实现方式多种多样&#xff0c;有数组实现满二叉树&#xff0c;有链表实现完全二叉树&#xff0c;今天我们就用队列来实现二叉树。 创建二叉树&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

长城之上的无人机:文化遗产的守护者

长城之上的无人机&#xff1a;文化遗产的守护者 在八达岭长城景区&#xff0c;两架无人机分别部署在了长城的南、北楼两点。根据当前的保护焦点和需求&#xff0c;制定了5条无人机综合巡查航线&#xff0c;以确保长城景区的所有开放区域都能得到有效监管。每天&#xff0c;无人…

【C++】:搜索二叉树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关多态的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

xml文本转Java对象

Java对象转String public static String toData(Object object) throws Exception {JAXBContext jc JAXBContext.newInstance(object.getClass());Marshaller m jc.createMarshaller();StringWriter output new StringWriter(2048);m.marshal(object, output);String data …

jsp 个人网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 个人&#xff08;博客&#xff09;网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&…

【电子通识】为什么电阻都是2.2、3.3、4.7、5.1这样的小数,而不是整数?

刚开始接触电路设计可能会对市面上已经有的电阻值如&#xff1a;2.2Ω、4.7Ω、5.1Ω、22Ω、47Ω、51Ω&#xff0c;通常都不是整数觉得非常困惑&#xff0c;所以查阅了一些资料&#xff0c;总结如下&#xff1a; 电阻是使用指数分布来设计生产的&#xff0c;即遵循国际电工委…

老年女性认知功能低于男性 |CHARLS CLHLS CFPS公共数据库周报(11.29)

欢迎参加郑老师2023年孟德尔随机化课程即将开始 发表文章后退款&#xff01;郑老师科研统计课程详情 CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement LongitudinalStudy&#xff0c;CHARLS)是一项持续的纵向调查&#xff0c;旨在调查中…

贝锐花生壳3大安全能力,保障网络服务安全远程连接

在没有公网IP的情况下&#xff0c;使用内网穿透工具&#xff0c;将本地局域网服务映射至外网&#xff0c;虽然高效快捷&#xff0c;但信息安全也是不可忽略的方面。 对此&#xff0c;贝锐花生壳提供了多维度的安全防护能力&#xff0c;满足不同场景下用户安全远程访问内网服务的…

使用webstrom编写vue开启提示

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

【开源】基于Vue和SpringBoot的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

插入排序与希尔排序(C语言实现)

1.插入排序 由上面的动图可以知道插入排序的逻辑就是从第一个元素开始往后遍历&#xff0c;如果找到比前一个元素小的&#xff08;或者大的&#xff09;就往前排&#xff0c;所以插入排序的每一次遍历都会保证前面的数据是有序的&#xff0c;接下类用代码进行讲解。 我们这里传…

高效便捷的淘宝商品详情关键词搜索API接口

联讯数据可以介绍一些高效便捷的淘宝商品详情关键词搜索API接口。 以下是一些可以考虑使用的API接口&#xff1a; 阿里云搜索引擎API&#xff1a;阿里云搜索引擎API是一个基于云计算技术的搜索引擎&#xff0c;提供商品详情关键词搜索功能。它支持中文搜索&#xff0c;并且具…

【漏洞复现】FLIR AX8红外线热成像仪命令执行漏洞

漏洞描述 eledyne FLIR 设计、开发、制造以及强大的传感和意识技术。自透射热图像、可见光图像、可见频率分析、来自测量和诊断的先进威胁测量系统以及日常生活的创新解决方案。 Teledyne FLIR 提供多种产品用于政府、国防、工业和商业市场。我们的产品,紧急救援人员,军事人…

Billu_b0x

信息收集 #正常进行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…