【发布时间】:2019-02-08 08:38:33
【问题描述】:
我想删除需要作业密钥的作业。我只知道工作类名称。请建议如何使用作业类名称获得相同的名称。
【问题讨论】:
标签: java quartz-scheduler quartz
我想删除需要作业密钥的作业。我只知道工作类名称。请建议如何使用作业类名称获得相同的名称。
【问题讨论】:
标签: java quartz-scheduler quartz
如果您遍历调度程序实例的所有作业组,您可以找到此信息。从那里你得到jobKey。使用 jobKey,您可以请求保存类信息的 jobDetail。如果匹配,则返回密钥。
public JobKey getJobKeyByJobClass (Scheduler scheduler, String className){
for (final String group : scheduler.getJobGroupNames()) {
for (final JobKey jobKey : scheduler.getJobKeys(org.quartz.impl.matchers.GroupMatcher.groupEquals(group))) {
if(className.equals(scheduler.getJobDetail(jobKey).getJobClass().getName())){
return jobKey;
}
}
}
return null;
}
【讨论】:
您可以通过多种方式获取JobKey。假设您的 Job 实现是 MyJob 类。
来自JobExecutionContext。如果你的工作正在执行,你可以
Scheduler scheduler = schedulerFactory.getScheduler();
JobKey jobKey = null;
for (JobExecutionContext jobCtx : scheduler.getCurrentlyExecutingJobs()) {
JobDetail jobDetail = jobCtx.getJobDetail();
if (MyJob.class.equals(jobDetail.getJobClass())) {
jobKey = jobDetail.getKey();
break;
}
}
与流相同
Scheduler scheduler = schedulerFactory.getScheduler();
Optional<JobDetail> job = scheduler.getCurrentlyExecutingJobs()
.stream()
.map(JobExecutionContext::getJobDetail)
.filter(jobDetail -> MyJob.class.equals(jobDetail.getJobClass()))
.findFirst();
JobKey jobKey = job.isPresent() ? job.get().getKey() : null;
按组名。通常,当您提交新作业以执行时,您会提供组和作业名称。如果你不这样做,那就开始吧,它会让事情变得更容易:)
Scheduler scheduler = schedulerFactory.getScheduler();
JobKey jobKey = null;
for (JobKey jk : scheduler.getJobKeys(GroupMatcher.jobGroupEquals("myGroup"))) {
if (MyJob.class.equals(scheduler.getJobDetail(jk).getJobClass())) {
jobKey = jk;
break;
}
}
与流相同
Scheduler scheduler = schedulerFactory.getScheduler();
Optional<JobDetail> job = scheduler.getJobKeys(GroupMatcher.jobGroupEquals("myGroup"))
.stream()
.map(jk -> scheduler.getJobDetail(jk))
.filter(jobDetail -> MyJob.class.equals(jobDetail.getJobClass()))
.findFirst();
JobKey jobKey = job.isPresent() ? job.get().getKey() : null;
希望对你有帮助!
【讨论】:
scheduler 的 JobKeys,并且只有目标工作。 :) 你想从它的实现类中终止 Job 吗?
JobExecutionContext。在这种情况下,获取密钥很明显jobExecutionContext.getJobDetail().getKey()。