티스토리 뷰

목차

    반응형

    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 문법 (닷넷 타이머 예제 소스)

    반응형