供应商管理:尽职调查的5步清单

阅读 29

2024-08-06

前言

这次我负责的一个后端项目,用了很多定时任务,定时任务框架是自带的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);

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 生命周期中的各种事件,并在事件发生时执行相应的业务逻辑。这样可以增强定时任务系统的可观测性和可维护性。

精彩评论(0)

0 0 举报