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

方案二 修改Spring Batch的配置

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

spring.batch.initialize-schema = always

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

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

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

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

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

方案一 直接操作删除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上现成的删除超时指定时间的历史数据的代码

SpringBatch历史数据的清理方案及实现相关推荐

  1. Docker垃圾清理方案

    Docker垃圾清理方案 我们在使用docker的过程中发现基于swarm使用Storage Driver: overlay的方式进行存储.但是发现这个特别占用存储空间. 清理所有停止的容器 dock ...

  2. iOS开发——cache自动清理方案探索

    有效的本地 cache 机制,可以避免不必要的重复网络加载,不仅能提高相关应用场景的资源加载速度,也可以避免不必要的流量浪费造成用户损失.但是,由于缓存一般做法是通过 url 经过 md5 变换的值作 ...

  3. W ndows10如何清理使用痕迹,Win10 C盘突然爆满,怎么清理?史上较全的C盘清理方案,推荐收藏...

    原标题:Win10 C盘突然爆满,怎么清理?史上较全的C盘清理方案,推荐收藏 有用户和老毛桃说,C盘就像是一个无底洞,无论给它分多大的分区,Windows总有办法给它填满!除了这位用户,相信很多朋友也 ...

  4. 历史数据清理--方案

    1.       数据库历史数据清理 #创建历史表 create table ag_alert_record_history asselect * from ag_alert_record; sele ...

  5. mysql 数据转移历史表_mysql 历史数据表迁移方案

    当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表.登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到. 在我们的 ...

  6. Mysql大表数据清理方案

    需求:表t_user_login_log中存储了上千条数据,我们需要对该表做数据清理,只保留近三个月的数据. 方案一 数据量<1000条时推荐使用 DELETE方法 推荐力度:极不推荐 是否会影 ...

  7. EFK之elasticSearch自动清理方案

    1 简介 本方案实现的功能点:输入日志文件.按照指定的日期(天数)清理数据.按照指定的磁盘路径使用率阈值清理数据.清除指定的索引数据,并配合crond实现定时监控和清理索引数据,以确保磁盘空间健康. ...

  8. 微信的H5页面缓存清理方案

    方案1.微信手动清理 安卓端的微信,打开:http://debugx5.qq.com,点击清除 IOS端的微信,清除缓存方法如下:1.打开微信,找到"我-设置-通用-存储空间-清理微信缓存& ...

  9. 电脑技巧:C盘爆满该如何清理,实用的清理方案,小白必备

    有用户和小编说,C盘就像是一个无底洞,无论给它分多大的分区,Windows操作系统总有办法给它填满!相信很多朋友也有这样的感受吧? 其实,好像休眠文件.系统页面文件等等GB大"人物" ...

最新文章

  1. 2022-2028年中国酱腌菜行业市场研究及前瞻分析报告
  2. layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法
  3. 使用之location和rewrite用法
  4. from...import 和 import 的区别
  5. 外部表如何导入mysql_如何利用Oracle外部表导入文本文件的数据
  6. jQuery实现下拉列表移动 效果
  7. android studio turn off hyperv,Android Studio 无法运行模拟器
  8. 程序员35岁前需要完成的10件事
  9. 希尔排序java写法_java高级排序之希尔排序
  10. Ubuntu 左边栏和顶栏都不见了,ctrl+alt+t 也调用不出terminal
  11. Golang的反射机制(The Laws of Reflection)
  12. 莫比乌斯反演学习笔记
  13. 强制隐藏windows任务栏(使用快捷键才弹出)(hide the taskbar in win10)
  14. php在线考试系统 附源码(一)
  15. 安卓百度地图开发代码
  16. MindSpore首发:基于贝叶斯的图神经网络推荐方法,提升新用户和交互稀疏用户推荐的点击率
  17. linux 变量引用 和 变量的自动类型转换 c++,C++能不能让编译器自动推导变量类型吗...
  18. 绿盟大赛-ModelArts实现智能花卉识别
  19. VLC Activex控件(VideoLAN.VLCPlugin.1 VideoLAN.VLCPlugin.2)的所有方法 属性及使用 在一个老外的网站上找到的
  20. 人物专访 | 首都在线助力中国企业出海,提供全球云网服务一体化方案

热门文章

  1. 【动态规划】(一)编辑距离
  2. 受疫情影响,新潮传媒开工首日裁员500人,你的offer还保得住吗?
  3. blackberry起步-图片滚动
  4. vue移动端文件预览
  5. 设计一个银行账户管理系统
  6. pta5-4 6174黑洞
  7. 火山小视频怎么消重 如何修改视频md5值
  8. 1、安装Gnocchi (时间数据) R~T版皆可
  9. gnocchi resource批量删除
  10. 招聘 | 小红书-校招-NLP预训练方向-北京/上海