Quartz.Net传递和返回数据

时间:2014-05-22 05:24:22

标签: asp.net-mvc quartz.net

了解Quartz.Net,但从Job中检索任何数据时遇到一些问题。这是我的代码:

    protected static void ConfigureQuartzJobs()
    {
        // construct a scheduler factory
        ISchedulerFactory schedFact = new StdSchedulerFactory();

        // get a scheduler
        IScheduler sched = schedFact.GetScheduler();
        sched.Start();

        IJobDetail job = JobBuilder.Create<ServerStatusJob>()
            .WithIdentity("myJob", "group1") // name "myJob", group "group1"
            .UsingJobData("xxx", "param1")
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
          .WithIdentity("myTrigger", "group1")
          .StartNow()
          .WithSimpleSchedule(x => x
              .WithIntervalInSeconds(30)
              .RepeatForever())
          .Build();

        sched.ScheduleJob(job, trigger);
    }

上面的代码我在我的Application_Start()中运行。如您所见,我尝试传递一些数据'xxx'。

public class MyJob : IJob
{
    public void Execute(Quartz.IJobExecutionContext context)
    {
        JobKey key = context.JobDetail.Key;
        JobDataMap dataMap = context.JobDetail.JobDataMap;

        string jobSays = dataMap.GetString("xxx");

        System.Diagnostics.Debug.WriteLine("Run at " + jobSays + DateTime.Now.ToString());
    }
}

此时,我成功获取了刚刚发送的参数。但是如何将一些数据返回到我的ConfigureQuartzJobs()方法。

1 个答案:

答案 0 :(得分:1)

您可以通过这种方式保存数据。 (见下文) 但是你并没有&#34;返回它&#34;到ConfigureQuartzJobs方法。 那种方法简单地连接了所有东西。

http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/more-about-jobs.html

PersistJobDataAfterExecution是一个可以添加到Job类的属性,它告诉Quartz在Execute()方法成功完成后更新JobDetail的JobDataMap的存储副本(不抛出异常),例如下一次执行相同的作业(JobDetail)接收更新的值而不是最初存储的值。与DisallowConcurrentExecution属性一样,这适用于作业定义实例,而不是作业类实例,尽管决定让作业类携带属性,因为它通常会对类的编码方式产生影响(例如&#39 ;有状态&#39;需要由执行方法中的代码明确地理解。