如何发送参数类Quartz.Net(How to send argument to class in

2019-08-04 01:27发布

我使用Quartz.Net(第2版)中的一类,每天8:00至20:00运行的方法(IntervalInHours = 12)

一切都OK,因为我用同样的工作,并触发作为Quartz.Net的教程,但我需要传递一些参数在类和运行这些参数的方法基地。

任何一个可以帮助我,而使用Quartz.Net我如何使用参数?

Answer 1:

您可以使用的JobDataMap

jobDetail.JobDataMap["jobSays"] = "Hello World!";
jobDetail.JobDataMap["myFloatValue"] =  3.141f;
jobDetail.JobDataMap["myStateData"] = new ArrayList(); 

public class DumbJob : IJob
{
    public void Execute(JobExecutionContext context)
    {
        string instName = context.JobDetail.Name;
        string instGroup = context.JobDetail.Group;

        JobDataMap dataMap = context.JobDetail.JobDataMap;

        string jobSays = dataMap.GetString("jobSays");
        float myFloatValue = dataMap.GetFloat("myFloatValue");
        ArrayList state = (ArrayList) dataMap["myStateData"];
        state.Add(DateTime.UtcNow);

        Console.WriteLine("Instance {0} of DumbJob says: {1}", instName, jobSays);
    }
} 


Answer 2:

为了扩大对@ ArsenMkrt的答案,如果你正在做的2.x的风格流畅的工作配置 ,你可以加载了JobDataMap是这样的:

var job = JobBuilder.Create<MyJob>()
    .WithIdentity("job name")
    .UsingJobData("x", x)
    .UsingJobData("y", y)
    .Build();


Answer 3:

抽象

让我来扩展位@阿尔森 - mkrtchyan后有显著笔记可能避免在生产中痛苦支持石英代码:

问题(持久性的JobStore)

请记住JobDataMap的版本的情况下,你使用的持久性的JobStore,如AdoJobStore。

摘要(TL; DR)

  • 仔细一想,对构建/编辑JobData否则会导致问题上触发未来的工作。
  • 如启用“quartz.jobStore.useProperties”配置参数官方文档建议 ,以尽量减少版本问题。 ()后使用JobDataMap.PutAsString。

细节

这也是文档中所述,然而,没有那么突出,但如果例如,你删除你的应用程序的下一个版本的一些参数可能会导致大问题的维护:

如果你使用一个持久的JobStore(在本教程的作业存储部分讨论),你应该在决定你的JobDataMap的地方是什么,因为它的对象将被序列化使用一些照顾,因此他们变得容易类版本问题。

也有关于配置中提到的作业存储相关的说明有关文件 :

所述“quartz.jobStore.useProperties”配置参数可以以指示AdoJobStore在JobDataMaps所有值将是字符串,并且因此可以被存储为名称 - 值对,而不是存储被设置为“真”(默认为false)在BLOB列的序列化形式更复杂的对象。 这是从长远来看更安全,因为你避免类版本的问题,有与无串类序列化到BLOB。



文章来源: How to send argument to class in Quartz.Net