Quartz.net 2.x 학습 노트 01

20893 단어 quartz
Quartz.net 2.0 2012 년 4 월 9 일 에 Released 버 전 을 발 표 했 는데 지금까지(2014-12-08)는 2.3 버 전 입 니 다.
Quartz.net 프로젝트 주소:http://www.quartz-scheduler.net/
공식 2.x 튜 토리 얼:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/index.html
 
Quartz.net 2.x.net 에서 의 사용
Quartz.net 라 는 소개 와 다운로드 가 인터넷 에 많이 올 라 왔 다.Quartz.net 은 우리 가 평소에 말 하 는 정시 임 무 를 처리 하 는 데 사용 되 는 오픈 소스 입 니 다.마치 프로그램 이 특정한 시간 에 일 을 하 게 하고 싶 은 것 과 같 습 니 다(예 를 들 어 매일 저녁 0 시 에 정기 적 으로 지도자 에 게 데이터 메 일 을 보 냅 니 다).
 
우선 콘 솔 프로그램 을 새로 만 듭 니 다:
  Quartz.net 2.x 学习笔记01_第1张图片
두 번 째 단 계 는 Quartz.net 의 인용 을 추가 합 니 다(다음 2 가지 방식 이 있 습 니 다).
1.Quartz.net 의 인용 은 dll 자체 인용 을 다운로드 할 수 있 습 니 다. 커 먼 로 깅 과 함께)
2.NuGet 을 직접 사용 하여 인용 추가
  http://www.quartz-scheduler.net/
검색 소 에 quartz.net 검색 설 치 를 입력 하면 됩 니 다(현재 2.3)
  Quartz.net 2.x 学习笔记01_第2张图片
 
위의 그림 과 같이 Common.Logging 에 의존 하 는 항목 이 있 습 니 다.설치 할 때 Common.Logging 도 자동 으로 설치 되 므 로 NuGet 참조 방식 을 사용 하 는 것 을 추천 합 니 다.
물론 NuGet 도 명령 으로 설치 할 수 있 습 니 다:Install-Package Quartz
 
시작 하기 전에 Quartz.net 설정(Configuration)
몇 가지 방법 이 있어 요. (다음은 자신의 이해+번역:http://www.quartz-scheduler.net/documentation/quartz-2.x/quick-start.html)
1.프로그램 에서 NameValueCollection 방식 으로 타이머 공장(scheduler)에 factory)매개 변수 제공
2.프로그램의 config 파일 에 quartz 설정 절 을 사용 합 니 다.
3.프로그램의 루트 디 렉 터 리 에 quartz.config 라 는 파일 을 사용 합 니 다.
세 가지 방식 은 사실 같 습 니 다.모두 키 값 이 맞 는 매개 변수 값 을 제공 합 니 다. (나중에 고치 기 편 하면 2 나 3 을 사용 하 는 것 을 권장 합 니 다)
 
예 를 들 어 quartz.config 를 사용 합 니 다. 다음 과 같은 대략적인 형식 을 볼 수 있 습 니 다.
quartz.scheduler.instanceName = MyScheduler quartz.threadPool.threadCount = 3 quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz
 
위 에서 간단하게 말 하면...
타이머 의 이름 은 MyScheduler 입 니 다.스 레 드 탱크 에 3 개의 스 레 드 를 할당 합 니 다.즉,최대 3 개의 작업 만 수행 할 수 있 습 니 다.세 번 째 설정 은 작업 의 저장 형식 입 니 다.기본 Quartz 의 모든 데이터(JobDetail,triggers)는 메모리 에 저장 되 어 있 기 때 문 입 니 다.위 에는 데이터베이스(quartz.net 의 소스 코드 를 다운로드 할 수 있 습 니 다.당신 은 그것 이 관련 된 건축 표를 제공 하 는 문 구 를 볼 수 있 습 니 다.그것 의 시 계 를 직접 사용 할 수 있 습 니 다.물론 설정 에 의 해 사용 할 수 있 습 니 다.-표 가 좀 많 고 현재 의 업무 가 그렇게 복잡 하지 않 습 니 다.만약 에 사용 하면 저 는 자신 이 시 계 를 만들어 저장 하 는 것 을 선택 할 것 입 니 다).
 
세 번 째,간단 한 미 션 을 시작 하 겠 습 니 다.
저 는 공식 튜 토리 얼 에 따라 콘 솔 의 Program.cs 를 다음 과 같은 코드 로 수정 합 니 다.
 
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace Quartz001
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //  Common.Logging            
            Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };

            try
            {
                //      Scheduler     
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

                //  
                scheduler.Start();

                Thread.Sleep(TimeSpan.FromSeconds(10));   

                //     
                scheduler.Shutdown();

                Console.ReadKey();
            }
            catch (SchedulerException ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}

 
 
 
F5 실행,출력
  Quartz.net 2.x 学习笔记01_第3张图片
 
위 는 Quartz.net 의 가장 간단 한 오픈 과 닫 기 입 니 다.
퀘 스 트 를 추가 합 니 다.Quartz 의 퀘 스 트 도 간단 합 니 다.퀘 스 트 클래스 를 계승 하고 IJob 인 터 페 이 스 를 실현 하기 만 하면 됩 니 다.
오른쪽 클릭 콘 솔 프로그램 에 HelloJob.cs 클래스 추가
using Quartz;

namespace Quartz001
{
    public class HelloJob:IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("   HelloJob  ");
        }
    }
}

 
 
그리고 Program.cs 코드 를 수정 합 니 다.
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace Quartz001
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //  Common.Logging            
            Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };

            try
            {
                //      Scheduler     
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

                //  
                scheduler.Start();

                //  JobBuilder           HelloJob     (  Job Key-       )
                IJobDetail job = JobBuilder.Create<HelloJob>()
                    .WithIdentity("job1", "group1")
                    .Build(); 

                //     --StartNow()    ,    10s,    
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10)
                        .RepeatForever())
                    .Build();

                //  Quartz            job
                scheduler.ScheduleJob(job, trigger);

                Thread.Sleep(TimeSpan.FromSeconds(60));

                //     
                scheduler.Shutdown();                
            }
            catch (SchedulerException ex)
            {
                Console.WriteLine(ex);
            }

            Console.WriteLine("");
            Console.ReadKey();
        }
    }
}

 
실행 결과:
  Quartz.net 2.x 学习笔记01_第4张图片
 
이때 간단 한 정시 임 무 를 완성 하 였 다.
 
job 퀘 스 트 에 서 는 JobDataMap 을 통 해 job 에 값 을 전달 할 수 있 습 니 다.
DumbJob.cs 작업 새로 만 들 기
using Quartz;

namespace Quartz001
{
    public class DumbJob:IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            JobKey key = context.JobDetail.Key;

            JobDataMap dataMap = context.JobDetail.JobDataMap;

            string jobSays = dataMap.GetString("jobSays");
            float myFloatValue = dataMap.GetFloat("myFloatValue");

            Console.Error.WriteLine("DumbJob      :" + jobSays + "" + myFloatValue);
        }
    }
}

 
 
Program.cs 파일 코드 수정
using System.Threading.Tasks;
using Quartz;
using Quartz.Impl;

namespace Quartz001
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //  Common.Logging            
            Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };

            try
            {
                //      Scheduler     
                IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

                //  
                scheduler.Start();

                //  JobBuilder           HelloJob     (  Job Key-       )
                IJobDetail job = JobBuilder.Create<HelloJob>()
                    .WithIdentity("job1", "group1")
                    .Build(); 

                //     --StartNow()    ,    10s,    
                ITrigger trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10)
                        .RepeatForever())
                    .Build();                

                IJobDetail dumbJob = JobBuilder.Create<DumbJob>()
                    .WithIdentity("myJob", "dumbGroup")
                    .UsingJobData("jobSays", "  DumbJob,   !")
                    .UsingJobData("myFloatValue", 3.141f)
                    .Build();
                //              
                //JobDataMap map = jobDetail.JobDataMap;
                //map.Put("jobSays", "  DumbJob,   !");

                ITrigger dumbTrigger = TriggerBuilder.Create()                    
                    .StartNow()
                    .WithSimpleSchedule(x=>x.WithIntervalInSeconds(3).WithRepeatCount(3))   //3      ,  3 (       ,    4 )
                    .Build();

                //  Quartz            job
                scheduler.ScheduleJob(job, trigger);
                scheduler.ScheduleJob(dumbJob, dumbTrigger);

                Thread.Sleep(TimeSpan.FromSeconds(60));

                //     
                scheduler.Shutdown();                
            }
            catch (SchedulerException ex)
            {
                Console.WriteLine(ex);
            }

            Console.WriteLine("");
            Console.ReadKey();
        }
    }
}

 
 
출력 결과:
  Quartz.net 2.x 学习笔记01_第5张图片
  Quartz.net 2.x 学习笔记01_第6张图片
학습 참고 자료:
원본 코드 다운로드
http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html
http://www.cnblogs.com/Raymond-YYC/p/3975378.html
http://www.cnblogs.com/monian/p/3822980.html

좋은 웹페이지 즐겨찾기