C #에서 Quartz.Net을 사용하는 방법

응용 프로그램에서 작업 할 때 미리 정의 된 시간 간격으로 백그라운드에서 특정 작업을 실행해야하는 경우가 많습니다. 응용 프로그램에서 작업을 예약하는 것은 어려운 일이며 Quartz, Hangfire 등과 같은 사용 가능한 많은 프레임 워크에서 선택할 수 있습니다.

Quartz.Net은 오랫동안 사용되어 왔으며 Cron 표현식 작업을 더 잘 지원합니다. Hangfire는 작업 처리 및 실행을 위해 ASP.Net의 요청 처리 파이프 라인을 활용하는 또 다른 작업 스케줄러 프레임 워크입니다.

Quartz.Net은 널리 사용되는 Java 작업 스케줄링 프레임 워크의 .Net 포트입니다. 가장 작은 앱에서 대규모 엔터프라이즈 시스템까지 사용할 수있는 오픈 소스 작업 스케줄링 시스템입니다. Quartz.Net의 공식 웹 사이트는 "Quartz.Net은 가장 작은 앱에서 대규모 엔터프라이즈 시스템에 이르기까지 사용할 수있는 모든 기능을 갖춘 오픈 소스 작업 스케줄링 시스템입니다."라고 말합니다.

시작하기

Quartz 공식 웹 사이트의 다운로드 섹션에서 Quartz.Net을 설치할 수 있습니다. Visual Studio IDE의 패키지 관리자 창을 통해 Quartz.Net을 설치할 수도 있습니다.

Quartz의 세 가지 주요 구성 요소는 작업, 트리거 및 스케줄러입니다. 즉, Quartz.Net에서 작업을 생성하고 예약하려면 스케줄러, 트리거 및 작업이 있어야합니다. 작업은 실행해야하는 작업을 나타내지 만 트리거는 작업 실행 방법을 지정하는 데 사용됩니다. 스케줄러는 작업을 예약하는 구성 요소입니다. 스케줄러에 작업 및 트리거를 등록해야합니다.

C #에서 Quartz.Net 프로그래밍

작업을 생성하려면 IJob 인터페이스를 구현하는 클래스를 생성해야합니다. 덧붙여서이 인터페이스는 Execute 메서드를 선언합니다.이 메서드는 사용자 지정 작업 클래스에서 구현해야합니다. 다음 코드 스 니펫은 Quartz.Net 라이브러리를 사용하여 사용자 정의 작업 클래스를 디자인하기 위해 IJob 인터페이스를 구현하는 방법을 보여줍니다.

public class Job : IJob

   {

       public void Execute(IJobExecutionContext context)

       {

           //Sample code that denotes the job to be performed

       }

   }

다음은 Job 클래스의 Execute 메서드에 대한 간단한 구현입니다. 응용 프로그램의 요구 사항에 맞게 사용자 지정 작업 클래스를 디자인하도록 맡기겠습니다. 아래에 제공된 코드 조각은 현재 DateTime 값을 텍스트로 파일에 씁니다. 이 구현은 스레드로부터 안전하지 않습니다. 단지 설명을위한 것입니다.

public void Execute(IJobExecutionContext context)

        {

            using (StreamWriter streamWriter = new StreamWriter(@"D:\Log.txt", true))

            {

                streamWriter.WriteLine(DateTime.Now.ToString());

            }

        }

작업 클래스를 이미 정의 했으므로 이제 고유 한 작업 스케줄러 클래스를 만들고 작업에 대한 트리거를 정의해야합니다. 트리거에는 작업의 메타 데이터가 cron 표현식으로 포함됩니다. 이 링크를 방문하여 cron 표현식을 생성 할 수 있습니다.

이제 작업 일정이 어떻게 잡혀 있습니까? 음, 작업을 예약하는 작업 스케줄러라는 구성 요소가 있습니다. 본질적으로 작업 스케줄러를 활용하여 작업을 실행하도록 예약 할 수 있습니다. 다음 코드 목록은 작업에 대한 트리거를 정의한 다음 작업 스케줄러에 작업과 트리거를 등록하는 방법을 보여줍니다.

public class JobScheduler

   {

       public static void Start()

       {

           IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

           scheduler.Start();

           IJobDetail job = JobBuilder.Create().Build();

           ITrigger trigger = TriggerBuilder.Create()

               .WithIdentity("Job", "")

               .WithCronSchedule("0 0/1 * 1/1 * ? *")

               .StartAt(DateTime.UtcNow)

               .WithPriority(1)

               .Build();

              scheduler.ScheduleJob(job, trigger);

       }

   }

위에 제공된 코드 목록을 참조하십시오. 트리거 인스턴스를 만들 때 트리거의 이름과 그룹이 어떻게 지정되었는지 확인합니다. 작업에 대한 트리거가 정의되고 필요한 cron 표현식을 사용하여 구성되면 트리거가 작업 스케줄러에 등록됩니다.

매초마다 실행되고 무기한으로 반복되는 트리거를 만들 수도 있습니다. 다음은 이와 같은 트리거를 빌드하는 방법을 보여주는 코드 스 니펫입니다.

ITrigger trigger = TriggerBuilder.Create()

 .WithIdentity("Job", "")

   .StartNow()

   .WithSimpleSchedule(s => s

       .WithIntervalInSeconds(10)

       .RepeatForever())

   .Build();

스케줄러를 시작하기 위해 항상 Windows 서비스가 필요한 것은 아닙니다. ASP.Net 웹 응용 프로그램을 사용하는 경우 Global.asax 파일의 Application_Start 이벤트를 활용 한 다음 아래 코드 조각과 같이 JobScheduler.Start () 메서드를 호출 할 수 있습니다.

public class Global : HttpApplication

   {

       void Application_Start(object sender, EventArgs e)

       {

           // Code that runs on application startup

           JobScheduler.Start();

       }

   }

JobScheduler는 이전에 디자인 한 사용자 정의 클래스의 이름입니다. Quartz.Net을 활용하여 작업을 영구 저장소에 저장할 수도 있습니다. 즉, 데이터베이스에서도 작업을 유지할 수 있습니다. 여기에서 지원되는 모든 작업 저장소 목록을 확인할 수 있습니다.