SpringBatch历史数据的清理方案及实现
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个表的数据需要清理。考虑到这些表之间的外键关系,删除表的顺序必须是:
- BATCH_STEP_EXECUTION_CONTEXT
- BATCH_STEP_EXECUTION
- BATCH_JOB_EXECUTION_CONTEXT
- BATCH_JOB_EXECUTION_PARAMS
- BATCH_JOB_EXECUTION
- 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历史数据的清理方案及实现相关推荐
- Docker垃圾清理方案
Docker垃圾清理方案 我们在使用docker的过程中发现基于swarm使用Storage Driver: overlay的方式进行存储.但是发现这个特别占用存储空间. 清理所有停止的容器 dock ...
- iOS开发——cache自动清理方案探索
有效的本地 cache 机制,可以避免不必要的重复网络加载,不仅能提高相关应用场景的资源加载速度,也可以避免不必要的流量浪费造成用户损失.但是,由于缓存一般做法是通过 url 经过 md5 变换的值作 ...
- W ndows10如何清理使用痕迹,Win10 C盘突然爆满,怎么清理?史上较全的C盘清理方案,推荐收藏...
原标题:Win10 C盘突然爆满,怎么清理?史上较全的C盘清理方案,推荐收藏 有用户和老毛桃说,C盘就像是一个无底洞,无论给它分多大的分区,Windows总有办法给它填满!除了这位用户,相信很多朋友也 ...
- 历史数据清理--方案
1. 数据库历史数据清理 #创建历史表 create table ag_alert_record_history asselect * from ag_alert_record; sele ...
- mysql 数据转移历史表_mysql 历史数据表迁移方案
当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表.登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到. 在我们的 ...
- Mysql大表数据清理方案
需求:表t_user_login_log中存储了上千条数据,我们需要对该表做数据清理,只保留近三个月的数据. 方案一 数据量<1000条时推荐使用 DELETE方法 推荐力度:极不推荐 是否会影 ...
- EFK之elasticSearch自动清理方案
1 简介 本方案实现的功能点:输入日志文件.按照指定的日期(天数)清理数据.按照指定的磁盘路径使用率阈值清理数据.清除指定的索引数据,并配合crond实现定时监控和清理索引数据,以确保磁盘空间健康. ...
- 微信的H5页面缓存清理方案
方案1.微信手动清理 安卓端的微信,打开:http://debugx5.qq.com,点击清除 IOS端的微信,清除缓存方法如下:1.打开微信,找到"我-设置-通用-存储空间-清理微信缓存& ...
- 电脑技巧:C盘爆满该如何清理,实用的清理方案,小白必备
有用户和小编说,C盘就像是一个无底洞,无论给它分多大的分区,Windows操作系统总有办法给它填满!相信很多朋友也有这样的感受吧? 其实,好像休眠文件.系统页面文件等等GB大"人物" ...
最新文章
- 2022-2028年中国酱腌菜行业市场研究及前瞻分析报告
- layui表单提交使用form.on(‘submit(sub)‘,function (){}) 使用ajax请求时回调不执行的原因及解决方法
- 使用之location和rewrite用法
- from...import 和 import 的区别
- 外部表如何导入mysql_如何利用Oracle外部表导入文本文件的数据
- jQuery实现下拉列表移动 效果
- android studio turn off hyperv,Android Studio 无法运行模拟器
- 程序员35岁前需要完成的10件事
- 希尔排序java写法_java高级排序之希尔排序
- Ubuntu 左边栏和顶栏都不见了,ctrl+alt+t 也调用不出terminal
- Golang的反射机制(The Laws of Reflection)
- 莫比乌斯反演学习笔记
- 强制隐藏windows任务栏(使用快捷键才弹出)(hide the taskbar in win10)
- php在线考试系统 附源码(一)
- 安卓百度地图开发代码
- MindSpore首发:基于贝叶斯的图神经网络推荐方法,提升新用户和交互稀疏用户推荐的点击率
- linux 变量引用 和 变量的自动类型转换 c++,C++能不能让编译器自动推导变量类型吗...
- 绿盟大赛-ModelArts实现智能花卉识别
- VLC Activex控件(VideoLAN.VLCPlugin.1 VideoLAN.VLCPlugin.2)的所有方法 属性及使用 在一个老外的网站上找到的
- 人物专访 | 首都在线助力中国企业出海,提供全球云网服务一体化方案