[솔 루 션] Microsoft Windows 서비스 (3) Quartz. net 정시 작업 사용

9433 단어 Microsoft
Quartz 는 OpenSymphony 오픈 소스 조직 이 Job scheduling 분야 에서 또 하나의 오픈 소스 프로젝트 로 Quartz. net 은 바로 Quartz 의 이식 버 전이 다.Quartz 는 간단 하거나 10 개, 100 개, 심지어 몇 만 개의 Jobs 와 같은 복잡 한 프로그램 을 만 드 는 데 사용 할 수 있다.
홈 페이지 강좌:http://www.quartz-scheduler.net/documentation/index.html
  
장점:
1. 전, 시작 시간, 간격, 횟수, 종료 시간 을 지정 할 수 있 습 니 다.
2. 편리 하 다.각종 스 레 드 문 제 를 고려 할 필요 가 없다.
 
다운로드:
  Install-Package Quartz
  
  
 
개발:
  1.job  2.trigger  3.scheduler
 
 
job: 수행 할 일 을 정의 하 는 작업 항목
IJob 인 터 페 이 스 를 실현 합 니 다. 단 한 가지 방법 이 있 습 니 다.
  
class SampleJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            File.AppendAllText("d:\\1.txt", "good");
        }
    }

 
trigger: 트리거, 언제 몇 번 을 실행 할 지 정의 합 니 다.
구조 함수: public SimpleTriggerImpl (string name, string group, DateOffset startTimeUtc, DateOffset? endTimeUtc, int repeatCount, TimeSpan repeatInterval);
  
위의 ctor 를 통 해 new 호출 트리거 를 사용 할 수 있 습 니 다.
 
 
scheduler: 스케줄 러, 트리거 와 작업 결합
  
var factory = new StdSchedulerFactory();
var sched = factory.GetScheduler();

 
실행:
a. IJob 을 IJobDetail 로 포장 하고 Public JobDetailImpl (string name, Type jobType) 을 통 해
b. IScheduler 인 터 페 이 스 를 호출 하 는 스케줄 링 방법: DateTimeOffset ScheduleJob (IJobDetail jobDetail, ITrigger trigger);
c. IScheduler 인터페이스 시작 방법:    void Start();또는 void StartDelayed (TimeSpan delay);
  
 
정지:
IScheduler 인터페이스 시작 방법 호출:    void Shutdown();
 
 
코드 다운로드: 다운로드 클릭
 
 
Quartz 와 TopShelf 를 간단하게 결합 하여 서 비 스 를 만 듭 니 다.
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             HostFactory.Run(x =>
 6             {
 7                 //      
 8                 x.Service<RuntimeService>(c =>
 9                 {
10                     c.ConstructUsing(name => new RuntimeService());
11                     c.WhenStarted(s => s.Begin());
12                     c.WhenStopped(s => s.Stop());
13                 });
14                 //       
15                 x.RunAsLocalSystem();
16 
17                 x.SetDescription("    ");
18                 x.SetDisplayName("    ");
19                 x.SetServiceName("    ");
20             });
21         }
22     }
23 
24     class RealJob : IJob
25     {
26         public void Execute(IJobExecutionContext context)
27         {
28             Console.WriteLine(DateTime.Now.ToLongTimeString());
29         }
30     }
31 
32     class RuntimeService
33     {
34         private IScheduler sched;
35         public RuntimeService()
36         {
37             var factory = new StdSchedulerFactory();
38             sched = factory.GetScheduler();
39         }
40         public void Begin()
41         {
42             sched.ScheduleJob(new JobDetailImpl("job", typeof(RealJob)),
43                 new SimpleTriggerImpl("trig", "group", -1, new TimeSpan(0, 0, 1)));
44             sched.Start();
45         }
46 
47         public void Stop()
48         {
49             sched.Shutdown();
50         }
51     }

좋은 웹페이지 즐겨찾기