2014-05-22 2 views
1

Просто узнайте о Quartz.Net, но у вас есть проблема с получением любых данных из Job. Вот мой код:Quartz.Net, передающие и возвращающие данные

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

Пожалуйста, объясните, какие данные вы хотите вернуть, почему и где. На самом деле это не имеет смысла, тем более, что ваш метод Configure уже вернулся. Попробуйте прочитать о Jobstore или перенести данные задания самостоятельно, например, используя базу данных. – CodeCaster

+0

Да, ваше право, оно уже вернулось. У меня возникла проблема с получением сеанса nhibernate в методе Execute(). Не знаете, как это получить. – dausdashsan

ответ

1

Вы можете сохранить данные таким образом. (см. ниже) Но вы не возвращаете его в метод ConfigureQuartzJobs. Этот метод просто соединяет все.

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

PersistJobDataAfterExecution является атрибутом, который может быть добавлен к классу работы, который говорит Quartz обновить сохраненную копию JobDataMap в JobDetail после выполнения Execute() метод завершается успешно (без выбрасывания исключения), например что следующее выполнение одного и того же задания (JobDetail) получает обновленные значения, а не первоначально сохраненные значения. Как и атрибут DisallowConcurrentExecution, это относится к экземпляру определения задания, а не к экземпляру класса задания, хотя было решено, что класс задания несет этот атрибут, потому что он часто влияет на то, как кодируется класс (например, "statefulness" должен быть явно «понят» кодом в методе выполнения).

+0

Спасибо за информацию. Но знаете ли вы, как я могу получить сеанс Nhibernate внутри метода Execute()? На самом деле возникают проблемы с получением сеанса. – dausdashsan

Смежные вопросы