안녕하세요~ 작은나무 입니다.
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메서드를 호출하여 예약된 작업을 실행합니다.