有没有办法通过工作名称在Quartz中获取工作密钥

Lon*_*iks 3 java quartz-scheduler

现在我正在搜索Quartz库中按作业名称获取作业键的功能.

我看到Scheduler有方法,通过组名称中使用获得作业键GroupMatcher<JobKey>QuartzNameMatcher它可以是用户的方式相同GroupMatcher

Set<JobKey> getJobKeys(NameMatcher<JobKey> matcher) throws SchedulerException;
Run Code Online (Sandbox Code Playgroud)

您知道Quartz库中是否已存在此功能?

wal*_*len 5

JobKey使用a 获取作业名称的API NameMatcher不存在AFAIK.

但是,通过迭代键,从名称中获取作业密钥实际上很容易:

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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用 GroupMatcher.anyGroup() 跳过 scheduler.getJobGroupNames() 循环,因为无论如何您都在循环它们。 (4认同)