Skip to content
mysql过期数据清理小工具
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/main
.gitignore
README.md
pom.xml

README.md

数据清理工具

目前只支持根据时间删除mysql中数据表数据,后续再做性能、功能和管理的优化

使用方式

配置文件job.list.conf

# id, cron, url,username, password, database, table, column, days
1,0 0/1 * * * ?,jdbc:mysql://180.137.128.153:3306/fna?useUnicode=true&characterEncoding=utf8,root,123456,fna,af_cc_app_matchrst,updated_at,-180

然后启动项目就可以了。当然,配置文件要放在conf文件夹中哦,或者指定worker.base

背景

最近接到一个需求,业务数据表中有三张表,只想保留最近365天的数据,过期的就删除,避免这些没有太大意义的数据造成数据表越来越大。

当时想了两种解决方案:

方案一

利用mysql的event事件机制,通过写sql脚本,可以很快的完成这个需求,优点很明显:

  1. 快速实现,时间成本低
  2. 不需要再引入什么乱七八糟的东西或者代码

但是,也有很明显的缺点:

  1. 没有日志啊,怎么知道有没有跑,成没成功呢
  2. 只能定时跑,不能人工触发,也没法做管理

方案二

当时出现在脑海里的第二个思路就是直接利用现有代码里面的ScheduledTask,写点java代码就把这个需求给搞了,这样的话日志也有了,加个controller连手动触发也有了,再积极点,搞个异常告警什么的也不是事。

然而,这样真的好吗?这次是要清三个表,就写三个定时任务,三段sql,下次再加个表,再加代码上线?好累啊,有没有更好点的方式呢?

方案三

所以就干脆自己写个工具算了,期望是以后有类似的需求就别再开发了。 总的来说,设计思路是这样的:

  1. 使用SpringBoot快速开发一个Web应用
  2. 启动的时候读配置文件,使用quartz加载定时任务
  3. 配置文件里面配置了清理的时间(cron表达式)、数据库url、用户名、密码、要清理的库名、表名、清理依赖的字段、保存时间
  4. 定时任务执行的时候,根据配置文件的配置,创建链接,拼装清理的sql语句,然后执行,执行完关闭链接

通过上面的设计,一是能够满足这次的需求,二是以后有类似的数据清理需求的时候,可以不用再做代码开发了,改改配置就好了,三是以后可以方便的做拓展,比如,加入zookeeper,就可以做分布式任务协调,加个页面,就可以页面操作和管理所有的清理任务,想简单点的话,有类似需求的项目可以自己一行命令运行这个工具类,想得复杂一点,可以加入不同的清理对象,使得不仅仅支持Mysql,然后可以搭建一个平台类项目,不同项目的数据清理需求都可以在这里维护管理....

当然,我想多了,其实就是完成这么一个简单的需求而已。

那么有没有其他方案呢?我想也有的,引入个分布式调度框架,然后写个清理脚本,用人家成熟的产品来做这个活儿嘛,但是想想好像更重了。

You can’t perform that action at this time.