我已经创建了作业,就像使用一个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()
答案 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
很有用。您真的需要吗?