2012-12-17 1 views
3

Quartz.NET에 대한 기본 웹 클라이언트에서 작업 중에 런타임에 작업의 JobDataMap 수정을 지원하고 있습니다.원격 클라이언트에서 JobDataMap 변경 사항을 유지하는 방법

내 직업은 내가 믿는 다음과 같은 속성들로 장식되어이 모든 것을 작업 상태 할 필요가있다 :

[PersistJobDataAfterExecution] 
[DisallowConcurrentExecution] 
public class SampleTenantJob : IJob { ... } 

런타임에서 나는 다음과 같은 코드를 실행을하지만 JobDataMap은 유지되지 않습니다 :

public void UpdateJobProperties(string jobName, string groupName, IDictionary<string, object> properties) 
    { 
     IJobDetail job; 
     if (!TryGetJob(jobName, groupName, out job)) 
      return; 

     foreach (var property in properties) 
     { 
      if (job.JobDataMap.ContainsKey(property.Key) && property.Value != null) 
      { 
       job.JobDataMap.Put(property.Key, property.Value); 
      } 
     } 
    } 

은 내가 작업의 XMLSchedulingDataProcessorPlugin를 사용했지만, 난이 t에 의해 JobDataMap 변화를 지속 할 수없는 여전히 시도 모두 메모리에 (RAMStore)와 AdoJobStore 및했기 때문에이이었다 처음에 생각 그는 원격 클라이언트.

답변

4

PersistJobDataAfterExecution (이름이 의미하는 바와 같이)에만 작업이 실행 완료되면 적용, 그래서 다음과 같은 작업 횟수가 PersistJobDataAfterExecution이 속성은, 카운트가 항상 동일하지 않고

[PersistJobDataAfterExecution] 
public class HelloJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    {   
     int count = (int?) context.MergedJobDataMap["Count"] ?? 1; 

     Console.WriteLine("hello " + count.ToString()); 

     context.JobDetail.JobDataMap.Put("Count" , ++count);  
    } 
} 

을 실행 추적합니다 .

작업을 실행하지 않으므로이 작업이 도움이되지 않으므로 새로운 JobDataMap으로 작업을 삭제하고 다시 작성해야한다고 생각합니다.

물론 JobDataMap을 사용하지 않아도되며 언제 어디에서나 작업 정보를 읽고 저장할 수 있습니다.

+0

"새 JobDataMap으로 작업을 삭제하고 다시 만들어야한다고 생각합니다." - 이것은'scheduler.AddJob (job, replace : true);를 호출하는 것입니다. –

관련 문제