业务需求
- 长时间不传数据终端标记下线
- 终端数据日报,月报,及大数据相关定时统计需求
- 数据清理
可用方案
- 方案1:直接使用springboot的job 缺点:无法实现分布式调度,分布式环境下任务可能会被重复执行,无法手动调用
- 方案2:对job写接口,然后接口通过linx系统级cron调用 缺点:依赖系统,依赖http对于时间比较长的任务不太友好,不方便统一的http相关参数配置
- 方案3(选用):使用定时任务框架,下面是一个常用的开源框架对比图,lts,和xxl-job都在之前公司用过,由于LTS不支持分片,且已多年不维护,放弃,elastic-job及saturn均需要使用zookeeper做为分布式调度,目前系统没有微服务相关建设,故也放弃,最终选定使用xxl-job
xxl-job搭建及使用
服务端配置
- 初始化数据库,/xxl-job/docdbtables_xxl_jobsql,直接导入数据库
- 下载源码,更改配置文件中的数据库连接打包测试
- 测试没问题后打jar包布到服务器
- 相关优化
- 去掉mail相关配置及依赖,后续有时间实现企业微信群报警
- 调整日志显示和其他业务相同
- 调整路径为/job
- 调整端口为不常用端口
客户端配置
- 配置客户端,向服务器注册执行器,由于当前仅1个业务服务,只需要一个执行器
- 添加切面用于统计traceId
- 添加BaseJob接口,用于统一管理JOB
业务JOB代码编写
- 在业务模块Job包下新增以Job结尾的类,实现BaseJob类runJob接口方法
- 在实现类的runJob方法上添加@XxlJob注解,value为JobHandler名
- 在JobEnum里添加一项用于标记此定时任务做用
- 在实现类的runJob方法上添加@EnumFixedValue注解,@EnumFixedValue(value = 1,strValues = "TestJob",relatedEnum = JobEnum.class),value为JobEnum code,strValues为JobHandler