SpringBatch历史数据的清理方案及实现

news2024/11/25 15:15:11

SpringBatch历史数据的清理方案及实现

需求背景

SpringBatch的程序已经运行了将近一年,数据量已经达到了一定的数据量级别。

对SpringBatch历史数据的清理也被提上日程。

但是SpringBatch的代码中似乎没有找到清理历史数据的代码,在官方文档中也没有提到如何清理历史数据。

在网上查找了诸多的资料之后(不知道为什么国内关于这一点的资料非常少,但是幸好外网有不少的讨论和研究),结合自己对于SpringBatch的了解,得到了如下的清理方案。

清理方案

场景一 如果你想要清理所有的SpringBatch的数据

方案一 手动执行数据库脚本

如果你想要通过执行SQL清理所有的SpringBatch的数据,如果你使用的是Mysql数据库,你可以执行如下脚本:

DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_CONTEXT;
DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_CONTEXT;
DROP TABLE IF EXISTS BATCH_STEP_EXECUTION;
DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_PARAMS;
DROP TABLE IF EXISTS BATCH_JOB_EXECUTION;
DROP TABLE IF EXISTS BATCH_JOB_INSTANCE;

DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_SEQ;
DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_SEQ;
DROP TABLE IF EXISTS BATCH_JOB_SEQ;

有或者你使用的是其他类型的数据库,下面的连接可以帮助你找到执行脚本。

https://github.com/spring-projects/spring-batch/tree/main/spring-batch-core/src/main/resources/org/springframework/batch/core

image-20230530110940187

方案二 修改Spring Batch的配置

你可以修改SpringBatch的配置,如下所示:

spring.batch.initialize-schema = always

这会让Spring Batch程序启动时都会初始化数据库。

场景二 删除超过指定时间的历史数据(重点)

实际使用的时候,可能更多的场景是这一种。假如我们生产环境使用了SpringBatch,我们清理数据肯定不能够将数据完全清空。只能说我清楚一段时间之前的,例如超过了30天的数据。

需要注意的是,SpringBatch创建的制品库是有外键关联的,如下图所示:

image-20230530111812642

image-20230530111846996

所以如果删除表的数据的时候,需要关注删除的顺序。

方案一 直接操作删除SpringBatch的数据表的数据(重点)

Spring Batch的生成的表共有9个,其中有6个表的数据需要清理。考虑到这些表之间的外键关系,删除表的顺序必须是:

  1. BATCH_STEP_EXECUTION_CONTEXT
  2. BATCH_STEP_EXECUTION
  3. BATCH_JOB_EXECUTION_CONTEXT
  4. BATCH_JOB_EXECUTION_PARAMS
  5. BATCH_JOB_EXECUTION
  6. BATCH_JOB_INSTANCE

可供参考的数据库脚本是:

DELETE FROM BATCH_STEP_EXECUTION_CONTEXT WHERE STEP_EXECUTION_ID IN (SELECT STEP_EXECUTION_ID FROM BATCH_STEP_EXECUTION WHERE JOB_EXECUTION_ID IN (SELECT JOB_EXECUTION_ID FROM  BATCH_JOB_EXECUTION where CREATE_TIME < ?))

DELETE FROM BATCH_STEP_EXECUTION WHERE JOB_EXECUTION_ID IN (SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION where CREATE_TIME < ?)

DELETE FROM BATCH_JOB_EXECUTION_CONTEXT WHERE JOB_EXECUTION_ID IN (SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION where CREATE_TIME < ?)

DELETE FROM BATCH_JOB_EXECUTION_PARAMS WHERE JOB_EXECUTION_ID IN (SELECT JOB_EXECUTION_ID FROM BATCH_JOB_EXECUTION where CREATE_TIME < ?)

DELETE FROM BATCH_JOB_EXECUTION where CREATE_TIME < ?

DELETE FROM BATCH_JOB_INSTANCE WHERE JOB_INSTANCE_ID NOT IN (SELECT JOB_INSTANCE_ID FROM BATCH_JOB_EXECUTION)

实际代码可以参考相关链接3提供的Github上的源码。

注意如果数据量很大的情况下可以考虑分页删除的功能。

相关链接

1. Spring Batch的Issues中对于历史数据清理的讨论

2. stackoverflow上关于如何清理SpringBatch历史数据的讨论

3. Github上现成的删除超时指定时间的历史数据的代码

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

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

相关文章

一、STM32程序下载软件_FlyMCU

1、软件简介 (1)FlyMCU是一款STM32下载程序的软件。 (2)FlyMCU采用ISP下载方式。 (3)ISP&#xff1a;在线系统编程。 (4)FlyMCU支持STM32F1、STM32F2、STM32F4系列&#xff0c;其他暂不支持&#xff0c;后续应该也不会更新了。 (5)STM32芯片的ISP下载&#xff0c;只能使用…

LINUX系统编程-----中

文章目录 进程间的通信管道popen 和 pclosepipeFIFO 共享内存system V 版本的共享内存创建/获取共享内存 共享内存涉及的函数共享内存的通信两个进程同时对共享内存进行读写 信号量使用信号量保护共享资源消息队列死锁 信号内核不可中断状态 进程间的通信 管道 在操作系统中&…

【备战秋招】每日一题:4月1日美团春招(二批)第三题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Electron简单开发

文章目录 1.参考网站2.HelloWold编写2.1新建空文件夹2.2node初始化2.3安装electron依赖2.4添加.gitignore 文件2.5创建main.js文件和index.html2.6运行electron应用 3.打包 接到一个任务&#xff0c;将electron集成到solidworks中&#xff0c;所以记录一下electron的简单操作&a…

【操作系统】05.文件管理

文件管理 文件的属性 文件内部数据的组织 文件之间的组织 操作系统向上层提供功能 创建文件 删除文件 打开文件 关闭文件 读文件 写文件 文件的逻辑结构 无结构文件 有结构文件 顺序文件 文件的物理结构 磁盘块&#xff08;文件块&#xff09; 连续分配 优点 对于机…

操作系统 四、文件管理

文章目录 4.1 文件的逻辑结构4.2 文件目录4.2.1 目录结构4.2.1.1 单级目录结构4.2.1.2 两级目录结构4.2.1.3 多级目录结构4.2.1.4 无环图目录结构 4.2.2 索引结点(FCB的改进) 4.3 文件的物理结构4.3.1 连续分配4.3.2 链接分配4.3.2.1 隐式链接4.3.2.2 显式链接 4.3.3 索引分配 …

稠密点云获取方法(二)

作为高分辨率三维重建的方法之一,从单张图像生成稠密三维点云在计算机视觉领域中一直有着较高的关注度。 以下文献提出了一种针对二维和三维信息融合的方法以解决三维点云稀疏难以检测远处的目标的问题。 Multimodal Virtual Point 3D Detection 该文献提出一种将 RGB 传感器…

【Mysql】| 超详细常见bug及解决方案

目录 一. &#x1f31f; 引入话题二. &#x1f31f; 引出bug1.1 查看bug1.2 Problem Solving2.1 查看bug2.2 Problem Solving3.1 字段长度异常3.2 Problem Solving 三. &#x1f31f; 最后 一. &#x1f31f; 引入话题 MySQL是一款广泛使用的开源数据库管理系统&#xff0c;它…

小白了解Docker容器技术

一、什么是Docker&#x1f451; 有一个最常见的例子来很好的帮我们简单了解Docker容器技术&#xff1a; 当我们在一台计算机中配置好了环境&#xff0c;花费了极大的时间和精力成功开发部署好了一个应用。准备尝试在不同操作系统、不同环境下部署这个应用时&#xff0c;我们需要…

图及其与图相关的算法

⭐️前言⭐️ 本篇文章主要介绍图及其与图相关的算法 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源码及博主…

如何在 Rocky Linux 上检查磁盘空间?

在 Rocky Linux 上检查磁盘空间是系统管理和维护的重要任务之一。磁盘空间的监控和管理可以帮助我们及时发现和解决存储空间不足的问题&#xff0c;以确保系统的正常运行。本文将详细介绍在 Rocky Linux 上检查磁盘空间的方法。 方法 1&#xff1a;使用 df 命令 df 命令是 Li…

SOLIDWORKS技巧大全培训教程

1 您可以使用 CTRLTAB 键循环进入在 SolidWorks 中打开的文件。 2 使用方向键可以旋转模型。按 CTRL 键加上方向键可以移动模型。按 ALT 键加上方向键可以将模型沿顺时针或逆时1 您可以使用 CTRLTAB 键循环进入在 SolidWorks 中打开的文件。 2 使用方向键可以旋转模型。按 CTRL…

【CloudCompare教程】012:基于点云数据的测量功能

本文讲解CloudCompare基于点云数据的测量功能,主要有:点云索引、坐标、距离、角度、面积、标签等。 文章目录 一、加载地形点云数据二、基于点云数据的测量功能1. 选择单点并显示信息2. 选择两点并显示分割信息3. 选择三点并显示相关三角形信息4. 定义矩形2D标签5. 保存当前标…

Milvus向量数据库

Milvus vector database 第一章 Milvus概述 Milvus创建于2019年&#xff0c;唯一的目标是&#xff1a;存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大量嵌入向量embedding vectors。 存储对象&#xff1a;向量 NOTE&#xff1a;embedding vectors是对非结构…

c#快速入门(下)

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;Inline和lambda委托和lambda &#x1f449;&#x1f…

上海斯歌荣获中国低代码/零代码行业“卓越影响力厂商奖”

3月19日&#xff0c;在「第三届中国 ISIG 产业智能大会」隆重的颁奖典礼上&#xff0c;上海斯歌被授予“卓越影响力厂商奖”&#xff0c;并入围国内权威咨询机构LowCode低码时代的《2022年中国低代码&零代码行业研究报告》卓越影响力榜单。 「第三届ISIG中国产业智能大会」…

如何编写接口自动化框架系列通过yaml来管理测试用例(四)

本文是接口自动化测试框架系列篇的第四篇 &#xff0c;主要介绍yaml包的使用 。自动化测试的本质是将功能测试用例交给代码去 目录 1. yaml介绍&#xff1f; 2.python中的yaml包 3.项目中使用yaml包 4 项目总结 执行 &#xff0c;测试人员往往是在自动化框架添加对应的测试…

惠普83752B高功率合成扫频器,20 GHz

惠普83752B扫频仪为元器件测试市场带来了卓越的综合性能&#xff0c;在通用台式扫频仪、扫频仪或标量测试应用中&#xff0c;83752B提供了性价比最高的性能。这款扫频仪在保持模拟源速度的同时&#xff0c;提供了卓越的精度和稳定性。全合成CW、步进和科坡扫描模式可在宽带和窄…

QT+OpenGL几何着色器

QTOpenGL几何着色器 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 几何着色器 几何着色器的输入是一个图元&#xff08;如点或者三角形&#xff09;的一组顶点几何着色器可以再顶点发送到下一着色器…

Linux——进程的等待

目录 前言&#xff1a; 一.进程等待 父进程回收子进程信息的相关函数1&#xff1a;wait函数 实验案例1&#xff1a;设置wait函数参数为NULL 实验案例2&#xff1a;wait函数带wstatus参数的案例&#xff1a;当子进程正常运行完退出时 情况3&#xff1a; wait函数带wstatus参数…