2013-01-18 2 views
0

저는 Quartz를 처음 사용하며 SQL Server Express를 사용하는 클라이언트 용 서비스를 사용하여 SQLServer에서 스크립트를 예약하는 데이 스크립트를 사용하려고합니다.Quartz에서 시작 시간을 기준으로 간격으로 작업 예약

특정 날짜부터 매주 두 번째 주에 실행할 작업을 예약 할 수있는 사용자가 필요합니다. 예 : StartDate = 2013 년 1 월 1 일 오후 12:00 (화요일), 14 일마다 반복하십시오.

작업 설정에는 StartTime (datetime), IntervalUnit (초, 분,시, 일, 주, 년) 및 RepeatsEvery (시작 날짜 이후에 실행되는 간격 수)가 있습니다.

예 : StartDate = "1/JAN/2013 12:00 PM"및 IntervalUnit = "DAY"및 RepeatsEvery = 14의 설정은 12:00 PM에 두 번째 화요일마다 작업을 시작합니다. StartDate가 이미 전달 된 경우 다음 시작일에 작업 할 필요가 있습니다. 예 : 오늘 서비스를 시작한 경우 (18/JAN/2013) 다음 시작일은 29/JAN/2013 12:00

입니다.

캘린더 트리거를 사용하여 Quartz에서이 작업을 수행하는 방법을 알아낼 수 없습니다. Quartz에 내장되어 있거나 시작시 새로운 StartTime을 계산해야합니까?

나는 어떤이에 대한 기능이나 깔끔한 바로 가기 내장, 새로운 상영을 계산하기 위해이되어 한 가정, 아니면 각 IntervalUnit이 유사한 기능을해야합니까 :

'Days 
Dim diff As Integer 
diff = Now.Subtract(.StartTime).TotalDays 
Dim offset As Integer 
offset = .RepeatsEvery - (diff Mod .RepeatsEvery) 
offset = Now.AddDays(offset).Subtract(.StartTime).TotalDays 'Get the days from Start t preserve time of day 
Start = .StartTime.AddDays(offset) 

답변

1

당신은 트리거를 만들 수 있습니다 trigger.GetFireTimeAfter (DateTime.Now)를 호출하여 새 시작 날짜를 계산 한 다음 새 StartDate로 새 트리거를 작성하십시오.

다음

C#을,하지만 희망이 당신에게 당신이 ISimpleTrigger 트리거를 캐스팅 이유입니다

var trigger = TriggerBuilder.Create() 
        .StartAt(new DateTimeOffset(new DateTime(2013,1,1))) 
        .WithSimpleSchedule(x=>x.RepeatForever() 
              .WithInterval(new TimeSpan(14,0,0,0))) 
        .Build();     


var newStartingPoint = trigger.GetFireTimeAfter(DateTime.Now); 

if (newStartingPoint.HasValue) 
{ 
    trigger = ((ISimpleTrigger) trigger).GetTriggerBuilder() 
             .StartAt(newStartingPoint.Value) 
             .Build();  
} 

.GetTriggerBuilder()가 ITrigger에 사용할 수없는 아이디어를 제공하지만, 같은 원리로 작동 다른 트리거와 함께.

관련 문제