前言

最近在写个人自动api处理项目,有一个需求,请求完A接口后,需要把A的结果拿到,在X秒后用结果去请求B接口。一开始想到用Mq去做,RabiitMq有个消息过期转发,主要想学下mq,发现效果并不是多好,于是用定时器实现了一波。

实现原理

我们需要搞清已知条件和需求

已知条件

  • 执行一次
  • X秒自定义
  • 知道什么时候结束

实际操作

使用quartz定时器,我已经抽象出一套定时器功能模块,只需要提交定时器对象就行,那我们需要设置的是定时器任务代码,和定时器cron表达式

定时器任务

这里有个细节,我定时器任务直接代码写的实现。

image-20210330103758936

亮点是他居然可以直接把类注入进来!!!有点厉害。这里需要注意的是传参需要设置JobDataMap对象里面,然后在参数context里去拿,不然报错!!!

cron表达式

cron表达式也是个细节,cron表达式的语法是 秒 分 时 天 月 ? 年,细心的朋友已经明白了,这对应java的时间转化不就是

1
ss mm HH dd ? MM yyyy

我们把当前时间推迟X秒,直接转化不就是一个cron表达式了吗!!!