본문 바로가기
C++ 200제/코딩 IT 정보

C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)

by vicddory 2018. 9. 10.

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 expression[C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)]


WithSimpleSchedule에 전달되는 인자는 WithIntervalInSeconds 함수를 이용합니다. 이어서 바로 아래 RepeatForever 함수도 호출하여 C# Quartz를 마치 타이머처럼 구동되게 할 수 있습니다.


WithIntervalInHours - 시간 단위

WithIntervalInMinutes - 분 단위

WithIntervalInSeconds - 초 단위


위에서도 언급했지만, 정해진 시간에 구동하는 것과 일정한 주기로 구동하는 것은 다릅니다.


C# Quartz와 Cron 표현식은 정해진 시간에 구동하는 개념이고, 타이머는 일정한 주기로 구동하는 개념입니다. 위와 같이 TriggerBuilder 인자를 수정하면, Quartz를 타이머처럼 사용할 수 있습니다.


C# Quartz 스케줄러, 초 단위 설정 Cron 문법 (닷넷 타이머 예제 소스)

댓글