티스토리 뷰
목차
C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)
Quartz를 사용할 때 Cron을 빼고 마치 타이머처럼 사용할 수 있는 예제 소스를 소개합니다.
C# Quartz를 이용해 초 단위로 작업을 할 땐, 아래처럼 사용할 수 있습니다. 3번 라인에 보면 "0/2 * * * * ?" 이런 Cron 표현식이 보이는데요. 이 표현식엔 한 가지 문제가 있습니다. 59초 이상을 반복하고 싶을 땐 에러가 발생하는 것이죠.
1 2 3 4 5 | ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithCronSchedule("0/2 * * * * ?") .StartAt(startTime) .Build(); | cs |
만약 3분 주기로 반복하는 스케줄링이 필요하다면 "0/180 * * * * ?" 이렇게 써야 합니다. 하지만, 59 이상을 허용하지 않아요. 그리고 C# Quartz Cron은 엄밀히 따지면 초 단위로 반복하는 개념이 없습니다. 언제 동작하느냐를 Cron이 표현하는 것이지 어떤 주기로 동작하느냐는 또 다른 문제입니다.
정해진 시간에 맞춰 구동하는 것과 일정한 주기로 구동하는 것은 다릅니다. 약간의 편법으로 1분 미만은 초 단위로 구동할 수 있는데, 문제는 타이머처럼 일정한 주기론 반복이 안 되는 것입니다.
하지만, C# Quartz에도 방법은 있죠. 아래처럼 코드를 수정하면 됩니다.
1 2 3 4 5 6 | ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .WithSimpleSchedule(x => x.WithIntervalInSeconds(120) .RepeatForever()) .StartAt(startTime) .Build(); | cs |
맨 처음 소스에서 3번 WithCronSchedule가 삭제됩니다.
그리고 바로 위 예제 소스처럼 WithSimpleSchedule, RepeatForever가 추가됩니다.
[C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)]
WithSimpleSchedule에 전달되는 인자는 WithIntervalInSeconds 함수를 이용합니다. 이어서 바로 아래 RepeatForever 함수도 호출하여 C# Quartz를 마치 타이머처럼 구동되게 할 수 있습니다.
WithIntervalInHours - 시간 단위
WithIntervalInMinutes - 분 단위
WithIntervalInSeconds - 초 단위
위에서도 언급했지만, 정해진 시간에 구동하는 것과 일정한 주기로 구동하는 것은 다릅니다.
C# Quartz와 Cron 표현식은 정해진 시간에 구동하는 개념이고, 타이머는 일정한 주기로 구동하는 개념입니다. 위와 같이 TriggerBuilder 인자를 수정하면, Quartz를 타이머처럼 사용할 수 있습니다.
C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)