java - 如何删除计划作业的特定触发器
问题描述
我已经创建了工作,例如使用一个 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();
我看到你JobDataMap
在你的Trigger
. 这对于将参数传递给Job
特定于触发器执行的 a 很有用。你真的需要那个吗?
推荐阅读
- php - 匹配数组子字符串的第 n 个位置并显示该数组的值的字符串
- c# - 我想将程序的结果从十六进制更改为十进制有人可以帮助我吗?
- python - 输出结果不正确:python 中 .pdf、.pptx 和 .docx 的文本提取
- reactjs - 检查组件是否存在 - 不要第二次渲染相同的组件
- json - Json 序列化程序返回空字符串
- c - pthreads的Readers-Writers问题导致只有1个读者
- matplotlib - Geopandas & Mapplotlib,如何在没有轮廓的情况下绘制任何形状?
- tensorflow - 如何并行化自定义 lstm(4d 输入)
- superset - superset 连接到 kylin 时,出现 table not found 错误
- python - 一按按钮时如何在kv文件中写入弹出窗口