如何获得Quartz Job的JobKey / JobDetail

时间:2015-07-01 12:55:27

标签: c# .net quartz-scheduler quartz.net

我很难理解如何使用Quartz 2.3.2版获取作业的详细信息。

到目前为止,我们使用Quartz v1.0.x进行工作,我必须将其升级到最新版本。

这就是我们过去获取工作细节的方式:

JobDetail job = scheduler.GetJobDetail(task.Name, groupName);

对于版本2.3.2,方法GetJobDetail()不再具有带2个参数的构造函数......而是采用JobKey参数。

不幸的是,我无法找到获得单一JobKey的方法。 我尝试的是以下内容:

string groupName = !string.IsNullOrEmpty(task.GroupNameExtension) ? task.GroupNameExtension : task.GroupName;
var jobkeys = quartzScheduler.GetJobKeys(GroupMatcher<JobKey>.GroupContains(groupName));
var jobkey = jobkeys.Single(x => x.Name == task.Name);
var jobDetail = quartzScheduler.GetJobDetail(jobkey);
  • 这是实现它/获取jobKey的正确方法吗? (var jobkey = jobkey.Single(...)行上是否只有一个作业密钥?
  • 在没有首先全部 JobKeys的情况下,真的没办法获得JobDetail吗?
  • 这是Quartz希望我们获得JobDetail的方式还是有更好/更简单的方式?

提前致谢

1 个答案:

答案 0 :(得分:4)

您可以创建一个新的工作密钥(这只是一个工作名称和组名的精美存储)

new JobKey("jobName", "jobGroupName");

只要您的工作名称和工作组名称与您创建工作的名称相同,您就可以获得工作细节。

var jobDetail = quartzScheduler.GetJobDetail(new JobKey("jobName", "jobGroupName"));

在个人方面,我在我的工作类中实现了一个静态方法来集中创建工作密钥,所以我没有很多地方:

public static JobKey GetJobKey(EntityServer server)
{
    return new JobKey("AutoRestart" + server.Id, "AutoRestart");
}

请注意,triggerKey

也是如此
public static TriggerKey GetTriggerKey(EntityServer server)
{
    return new TriggerKey("AutoRestart" + server.Id, "AutoRestart");
}
相关问题