实现延迟任务
前言
最近在写个人自动api处理项目,有一个需求,请求完A接口后,需要把A的结果拿到,在X秒后用结果去请求B接口。一开始想到用Mq去做,RabiitMq有个消息过期转发,主要想学下mq,发现效果并不是多好,于是用定时器实现了一波。
实现原理
我们需要搞清已知条件和需求
已知条件
- 执行一次
- X秒自定义
- 知道什么时候结束
实际操作
使用quartz定时器,我已经抽象出一套定时器功能模块,只需要提交定时器对象就行,那我们需要设置的是定时器任务代码,和定时器cron表达式
定时器任务
这里有个细节,我定时器任务直接代码写的实现。
亮点是他居然可以直接把类注入进来!!!有点厉害。这里需要注意的是传参需要设置JobDataMap对象里面,然后在参数context里去拿,不然报错!!!
cron表达式
cron表达式也是个细节,cron表达式的语法是 秒 分 时 天 月 ? 年,细心的朋友已经明白了,这对应java的时间转化不就是
1 | ss mm HH dd ? MM yyyy |
我们把当前时间推迟X秒,直接转化不就是一个cron表达式了吗!!!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 EM博客!