繁体   English   中英

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

[英]how to delete specific trigger for a scheduled job

我已经创建了工作,例如使用一个 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()

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;
}

希望有帮助。

更新:

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

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();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM