如何删除计划作业的特定触发器

时间:2020-07-04 20:22:49

标签: java spring quartz-scheduler scheduler job-scheduling

我已经创建了作业,就像使用一个jobName和不同的键创建作业一样(请参见JobDataMap)

CronTriggerImpl trigger = new CronTriggerImpl();
JobDetailImpl jobDetail = null;
trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
trigger.setName(getUniqueJobId());
trigger.setCronExpression(cronExpression);
trigger.setTimeZone(timeZone);
JobDataMap dataMap = new JobDataMap();
dataMap.put("jobName", "job");
dataMap.put("id", "key");
trigger.setJobDataMap(jobDataMap);
jobDetail = new JobDetailImpl();
jobDetail.setName(getUniqueJobId());
jobDetail.setJobDataMap(jobDataMap);
jobDetail.setJobClass(JobLauncherDetails.class);
scheduler.scheduleJob(jobDetail, trigger);

它工作正常,但是我想删除特定的触发器,我该如何删除 我看过费用来源,但是不匹配。请帮帮我

**更新时间:**

我想删除 schedule.deleteJob(JobKey)根据我的日程表配置,什么是工作密钥 还是我应该使用schedule.unScheduler()

1 个答案:

答案 0 :(得分:0)

org.quartz.Scheduler#unscheduleJob接受触发键作为参数。因此,您可以删除指定的触发器,而不是作业。

public static boolean removeJob(String jobName, String jobGroup) throws SchedulerException {
  TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);
  if (scheduler.checkExists(triggerKey)) {
    scheduler.unscheduleJob(triggerKey);    // trigger + job
  }
  logger.info(">>>>>>>>>>> removeJob success, triggerKey:{}", triggerKey);
  return true;
}

希望有帮助。

更新:

我们实际上并不知道您的功能需求。但是,您可以以更简洁的方式创建触发器并将其绑定到给定的Job:

CronTrigger trigger = TriggerBuilder.newTrigger()
  .withIdentity("trigger3", "group1")
  .withSchedule(CronScheduleBuilder.cronSchedule("0 0/2 8-17 * * ?"))
  .forJob("myJob", "group1") // Binding the Trigger to the Job
  .build();

我看到您在JobDataMap中使用Trigger。这对于将特定于触发器执行的参数传递到Job很有用。您真的需要吗?

有用链接: https://www.baeldung.com/quartz