现在,我正在寻找在Quartz库中按作业名称获取作业密钥的功能。

我看到Scheduler具有使用GroupMatcher<JobKey>通过组名获取作业密钥的方法,而且Quartz具有NameMatcher,可以用与GroupMatcher相同的方式来使用

Set<JobKey> getJobKeys(NameMatcher<JobKey> matcher) throws SchedulerException;

您知道Quartz库中已经存在此功能吗?

最佳答案

AFAIK不存在使用JobKey通过作业名称获取NameMatcher的API。

但是,实际上,仅通过迭代密钥就可以很容易地从其名称中获取任务的密钥:

public JobKey findJobKey(String jobName) {
    // Check running jobs first
    for (JobExecutionContext runningJob : scheduler.getCurrentlyExecutingJobs()) {
        if (Objects.equals(jobName, runningJob.getJobDetail().getKey().getName())) {
            return runningJob.getJobDetail().getKey();
        }
    }
    // Check all jobs if not found
    for (String groupName : scheduler.getJobGroupNames()) {
        for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
            if (Objects.equals(jobName, jobKey.getName())) {
                return jobKey;
            }
        }
    }
}

09-19 15:31