折腾xxl-job系列之job增加上下文参数之触发时间

问题的提出

Xxl-job的执行器本身是无法获取到job的本次触发时间与下次触发时间这两个信息的。这两个时间信息在业务上有什么用处没有?答案是仁者见仁,智者见智。对于我们公司的业务来说,这两个信息具有实际意义。

打个比方来说。当每次job执行时,我想要获取job上次触发时间和本次触发时间。以这两个时间为一个时间段探测在这段时间内是否有报警记录。那么job的执行时间对我而言是有实际意义的。

问题的解决

既然xxl-job没有现成的解决方案。我们改如何改动下从而解决这个问题呢?

线索获取:登录调度中心。获取任务信息。

 

后台服务路径:

/xxl-job-admin/jobinfo/pageList

可以从后台服务路径中看到:

XxlJobInfo这个对象。

分析下这个对象的内容:

public class XxlJobInfo {

...

private long triggerLastTime;   // 上次调度时间
private long triggerNextTime;  // 下次调度时间

...

}

我们看到在job信息里面是存在这个调度时间的。

我们要做的是什么?那就探讨下在调度器与执行器之间XxlJobInfo对象是如何传递的。

下面我们将通过分析调度控制器页面执行一次】按钮

我们跟踪下代码:

/xxl-job-admin/jobinfo/trigger

我们在触发任务的时候会从DB获取job数据配置信息。其中包含了我们要用到的上次调度时间,下次调度时间。

 

 触发器参数里的原始的代码中是没有把我们需要的上次执行时间,下次执行时间放入的。这是我们需要改造的点。

最终TriggerParam交由执行器。

执行器捕获了参数,从参数中可以获取jobInfo的上次执行时间,下次执行时间。那又是如何获取的呢?

可以看到执行器这边将TriggerParam放到了任务线程的任务队列里面。

具体执行job的线程则从触发队列里面获取到triggerParam。

而每个job都有自己的XxlJobContext,从而最终从调度中心来的参数可以通过这个对象获取。

 

 

我们自己的业务代码可以通过上下文对象获取job本次执行时间以及下次执行时间。利用这个代码。解决了我们的需求。

问题的总结

解决以上问题。首先的思路就是找到xxljob本身是否存在我们要用到的信息。我们发现其实xxljob本身是有对应的信息的。只是默认不提供,通过跟踪源代码,我们获得了关键参数对象【TriggerParam】。通过改造【TriggerParam】我们成功的获取到了我们要用到的信息。

所以需要大家自己多阅读源码,跟踪老师们的步伐找到有用的信息。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值