2016年5月23日 星期一

C# 排程套件: Quartz

# Quartz 套件

## 簡介
Quartz是個排程套件

## 安裝
```shell
$ install-package Quartz
```

## 建立Job
```csharp
namespace ConsoleApplication1
{
    using System;
    using Quartz;

    [DisallowConcurrentExecution]
    internal class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            Console.WriteLine("do job");
        }
    }
}
```
## 建立排程
```csharp
namespace ConsoleApplication1
{
    using Quartz;
    using Quartz.Impl;

    internal class Program
    {
        private static void Main(string[] args)
        {
            // 建立排程器
            var schedulerFactory = new StdSchedulerFactory();
            var schedular = schedulerFactory.GetScheduler();

            // 建立Job
            IJobDetail job = JobBuilder.Create<MyJob>()
                .WithIdentity("MyJob")
                .Build();

            // 建立Trigger
            ITrigger trigger = TriggerBuilder.Create()
                .WithCronSchedule("0 0/1 * * * ?")
                .WithIdentity("MyJobTrigger")
                .Build();

            // Job配對Trigger
            schedular.ScheduleJob(job, trigger);

            // 啟動排程器
            schedular.Start();
        }
    }
}
```

## 注意事項
* 排程是固定周期觸發,和Job的執行時間無關
* 每次觸發都會重新建立一個全新的Job物件
* 在Job上加入DisallowConcurrentExecution來限制每次只能執行一個Job