2012-03-23 3 views
1

석영 작업을 처리하는 C# Topshelf Windows 서비스가 있습니다. 이러한 작업은 다음과 같이 데이터베이스에 저장됩니다Crontrigger를 사용하는 반복되지 않는 석영 작업?

public class JobConfiguration : IJobConfiguration { 
    public string Name { get; set; }   //ImportService 
    public string Type { get; set; }   //[ClassName, AssemblyName] 
    public string CronTrigger { get; set; } //example: 0 0 12 * * ? 
    public string CronMeaning { get; set; } //example: fire at noon every day 
} 

지금 내가 한 번 해고 전용 인 작업을 추가해야합니다 (다른 모든 작업을 반복해야했다).

if (JobConfiguration.CronTrigger == Null) 
    //start job with Quartz SimpleTrigger 
else 
    //start job with Quartz CronTrigger 

이 할 수있는 더 나은 솔루션이 있습니까 : 내 (임시) 솔루션은 SimpleTrigger 대신 같은 CronTrigger와 해당 작업을 CronTrigger 필드 NULL을두고 시작하는 것입니다? 즉, 한 번만 작업을 시작하고 반복하지 못하게하는 CronTrigger가 있습니까?

답변

2

하나의 솔루션은 JobConfiguration 추상을 작성하고 SimpleJobConfiguration 및 CronJobConfiguration을 해당 JobConfiguration에서 상속받는 것입니다.

데이터베이스에서 동일한 테이블에 저장할 수 있습니다.

다른 솔루션은 Simple 및 Cron 트리거의 StartTimeUtc 및 EndTimeUtc를 사용하는 것입니다. 이렇게하면 30 분마다 실행되지만 DateTime.Now() 트리거에 EndDateUtc가있는 cron 문을 만들 수 있습니다. Add (TimeSpan.FromMinutes (31)).