Quartz重要三个关键的Listener接口

前言

这次我负责的一个后端项目,用了很多定时任务,定时任务框架是自带的Quartz。我让新来的小刘记录一下定时任务的执行情况。后来他很快的完成了,我看了之后,还是觉得有些问题吧。小刘是通过AOP去实现的,看一下代码

@Around("jobAspect()")
public Object doInvoke(ProceedingJoinPoint joinPoint) throws Throwable{
    // 执行目标方法
    Object result = joinPoint.proceed();
    // 创建任务日志实体对象
    JobLog log = new JobLog();
    //记录任务开始执行时间,任务时间(代码省略)......
    // 设置任务执行是否成功
    log.setIsSuccess(true);
    // 保存日志
    jobMapper.insert(log);
    return result;
}

看到这个代码我认为有两个问题:

  • 上面的日志,不能记录异常状态;
  • 并且根据经验来讲,应该可以实现接口就行了,不用AOP。

因此到这儿我觉得是时候,重新认识一下Quartz内部的接口了。下面就给大家简单介绍一下Quartz的重要接口吧。

Quartz重要三个关键的Listener接口

JobListener 任务监听接口

监听任务执行情况的接口,监听 任务执行前、以及执行结果、执行是否有异常。

//必须设置一个名称
String getName();

//任务调用前回调
void jobToBeExecuted(JobExecutionContext context);

//任务被阻止执行的回调。
void jobExecutionVetoed(JobExecutionContext context);

//任务执行完成之后的方法,如果任务异常jobException不为null
void jobWasExecuted(JobExecutionContext context,
        JobExecutionException jobException);

对于前言中的案例可以使用实现JobListenerjobWasExecuted方法去记录日志
如果JobExecutionException不为空则表明任务异常,并记录报错日志。

TriggerListener 触发器监听接口

监听触发器的情况

String getName();

//trigger 被触发
void triggerFired(Trigger trigger, JobExecutionContext context);

// 是否阻止任务执行,如果返回true 对应trigger绑定的任务就不会执行(JobListener.jobExecutionVetoed 就能监听到任务被阻止)
boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);

// 当触发器错过触发时间时被调用 
void triggerMisfired(Trigger trigger);

//trigger绑定的任务执行完成
void triggerComplete(Trigger trigger, JobExecutionContext context,
        CompletedExecutionInstruction triggerInstructionCode);

SchedulerListener

Quartz 框架中的 SchedulerListener 接口定义了一组监听 Scheduler 生命周期事件的方法。通过实现 SchedulerListener 接口,开发者可以在 Scheduler 状态发生变化时得到相应的通知。下面我们来详细介绍一下 SchedulerListener 接口中的各个方法(代码就不粘贴了):

  1. jobScheduled(Trigger trigger):

    • 当有新的任务被成功调度时,此方法会被调用。
    • 参数 trigger 表示被调度的触发器对象。
  2. jobUnscheduled(TriggerKey triggerKey):

    • 当一个任务被从 Scheduler 中删除时,此方法会被调用。
    • 参数 triggerKey 表示被删除的触发器的标识。
  3. triggerFinalized(Trigger trigger):

    • 当一个触发器完成它的生命周期时,此方法会被调用。
    • 参数 trigger 表示完成生命周期的触发器对象。
  4. triggerPaused(TriggerKey triggerKey):

    • 当一个触发器被暂停时,此方法会被调用。
    • 参数 triggerKey 表示被暂停的触发器的标识。
  5. triggerResumed(TriggerKey triggerKey):

    • 当一个触发器从暂停状态恢复时,此方法会被调用。
    • 参数 triggerKey 表示被恢复的触发器的标识。
  6. jobAdded(JobDetail jobDetail):

    • 当一个新的任务被添加到 Scheduler 中时,此方法会被调用。
    • 参数 jobDetail 表示被添加的任务详情。
  7. jobDeleted(JobKey jobKey):

    • 当一个任务从 Scheduler 中删除时,此方法会被调用。
    • 参数 jobKey 表示被删除的任务标识。
  8. jobPaused(JobKey jobKey):

    • 当一个任务被暂停时,此方法会被调用。
    • 参数 jobKey 表示被暂停的任务标识。
  9. jobResumed(JobKey jobKey):

    • 当一个任务从暂停状态恢复时,此方法会被调用。
    • 参数 jobKey 表示被恢复的任务标识。
  10. schedulerError(String msg, SchedulerException cause):

    • 当 Scheduler 发生错误时,此方法会被调用。
    • 参数 msg 表示错误消息, cause 表示引发错误的异常对象。
  11. schedulerInStandbyMode():

    • 当 Scheduler 进入待机模式时,此方法会被调用。
  12. schedulerStarted():

    • 当 Scheduler 启动完成时,此方法会被调用。
  13. schedulerStarting():

    • 当 Scheduler 开始启动时,此方法会被调用。
  14. schedulerShutdown():

    • 当 Scheduler 关闭时,此方法会被调用。
  15. schedulerShuttingdown():

    • 当 Scheduler 开始关闭时,此方法会被调用。

通过实现 SchedulerListener 接口,开发者可以监听 Scheduler 生命周期中的各种事件,并在事件发生时执行相应的业务逻辑。这样可以增强定时任务系统的可观测性和可维护性。

Listener使用方式:
1.实现Listener 接口
2.将实现类注册到ListenerManager中。不同的监听器需要使用对应的Add方法。
eg:
Scheduler scheduler = // 获取 Scheduler 实例;
scheduler.getListenerManager().addTriggerListener(new MyTriggerListener());

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不务专业的程序员--阿飞

兄弟们能否给口饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值