IT정보사전

[.Net] Quartz를 이용한 Scheduler 작업 본문

웹 프로그래밍

[.Net] Quartz를 이용한 Scheduler 작업

작은나무0530 2018. 12. 5. 14:31
728x90
반응형

안녕하세요~ 작은나무 입니다.
ASP.NET에서도 JAVA와 같이 Scheduler를 작업하려고 알아보니 동일하게 Quartz를 이용하여 예약된 작업을 할 수 있네요..

정기적으로  Scheduler를 이용하기 위해 Window의 Scheduler를 이용해 왔었는대요^*^
Quartz를 이용하여 정기적으로 예약된 작업을 하는 방법을 알아보겠습니다.

1. Quartz를 작업하기 위해 Nuget을 이용하여 프로젝트를 진행합니다.
    먼저 NuGet 패키지 관리에서 Quartz를 추가합니다.

2. Quartz를 검색 후 설치를 진행합니다.

3. 설치가 완료되면 Quartz.dll이 확인됩니다.

Quartz는 작업, 트리거, 스케줄러로 구성됩니다.
Quartz를 사용하려면 IJob 인터페이스를 구현해야 하구요~ 예약 작업을 실행할 부분을 아래와 같이 작성합니다.

using Quartz;
using System.IO;
using System.Net;

public class SampleJob : IJob
{
    public void Execute(IjobExecutionContext context)
    {
        try
        {
            string url = "http://localhost/Job.aspx";
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            myRequest.Method = "GET";
            WebResponse myResponse = myRequest.GetResponse();
            StreamReader sr = new StreamReader(myResponse.GetResponseStream().System.Text.Encoding.UTF8);

            string result = sr.ReadToEnd();
            sr.Close();
            myResponse.Close();
        }
        catch {}
    }
}


4. 이제 위의 예약작업을 실행할 트리거 부분을 작성합니다.


using Quartz;
using Quartz.Impl;

public class JobScheduler
{
    public static void Start()
    {
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail CampainDelJob = JobBuilder.Create().Build();
        ITrigger trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(s=>s.WithIntervalInMinutes(1)).Build();

        scheduler.ScheduleJob(CampainDelJob, trigger);
    }
}

SampleJob은 예약작업으로 만들어놨던 Class의 이름입니다.
TriggerBuilder.Create().WithDailyTimeIntervalSchedule의 부분을 보시면 s.WithIntervalInMinutes(1)의 의미는 1분마다 작업을 진행하겠다 입니다.

만약 24시간에 1번만 실행해야 하며 지정된 시간에 돌아야 한다면 아래와 같이 작성하시면 되겠습니다.
s.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(00,10))
24시간에 한번 00시 10분에 실행해라... 이겠죠~

5. 이제 예약된 작업을 위한 Code는 전부 만들었습니다. 실행만 시키면 되겠네요^^
실행을 하기 위해 Global.asax의 Application_Start의 이벤트JobScheduler.Start메서드를 호출하여 예약된 작업을 실행합니다.

728x90
반응형
그리드형
Comments