了解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()方法。
答案 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;需要由执行方法中的代码明确地理解。